开发者

One videoview blocked by another videoview

My activity layout is shown below. Basically I have a listview menu on the left and two videoviews that I switch between depending on which menu item the user clicks.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout   
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_system_status"
    android:title="@string/system_status"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
 开发者_开发问答   android:orientation="horizontal">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:layout_weight="4">
        <ListView
        android:id="@+id/list_video_feed"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        </ListView>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linear_layout_live_video"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:layout_weight="1">

        <VideoView 
        android:id="@+id/video_view" 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center"
        />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linear_layout_video_gallery"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:layout_weight="1">

        <Gallery 
        android:id="@+id/gallery"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

        <VideoView 
        android:id="@+id/archived_video_view" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

    </LinearLayout>

</LinearLayout>

In my code, if I want to play a video from the view without the gallery, I hide the other.

linearLayoutVideoGallery.setVisibility(GONE);
linearLayoutLiveVideo.setVisibility(VISIBLE);
playVideo();

The problem is that the archived_video_view stays on top and only the gallery hides. Any tips? Let me know if you need any additional information. Thanks!

EDIT: Here is my if statement for choosing the menu items inside onCreate(). Hopefully this will help. When I click position==1 and then postion==2, the gallery is gone but the archived_video_view is still there paused so I can only see the top sliver of video_view where the gallery used to be.

          lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
                if (position==1) { //video gallery list item has been pressed
                    vvLive.stopPlayback();
                    linearLayoutLiveVideo.setVisibility(GONE);
                    linearLayoutVideoGallery.setVisibility(VISIBLE);
                    playArchivedVideo();

                }

                else if (position == 2) { //live video list item has been pressed
                    vvArchive.stopPlayback();
                    linearLayoutVideoGallery.setVisibility(GONE);
                    linearLayoutLiveVideo.setVisibility(VISIBLE);
                    playLiveVideo();
                }
            }
          });


VideoViews are SurfaceViews. They work by effectively popping a window through to the hardware framebuffer. But there is only one such hardware framebuffer that you are trying to show in both SurfaceViews, as well as write to with both MediaPlayers. Thus, there are numerous rendering errors that can occurs when trying to juggle multiple SurfaceViews, and such errors will not be consistent between different devices.

The simplest answer is don't do it. Isolate each VideoView into separate Activities, or reconstruct your layout so that you can share a single video view.

The next simplest answer is don't do it simultaneously. When switching between two video views, remove one (completely remove it from the View hierarchy) before activating another. Maybe use an ImageView placeholder in between to keep the UI relative consistent as the use makes such a switch.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜