一个视频视频被另一个视频视图阻止

时间:2011-04-15 20:09:05

标签: android visibility android-linearlayout android-videoview

我的活动布局如下所示。基本上我左边有一个listview菜单,我根据用户点击的菜单项切换两个视频。

<?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>

在我的代码中,如果我想从没有图库的视图播放视频,我会隐藏另一个。

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

问题是archived_video_view保持在最顶层,只有画廊隐藏。有小费吗?如果您需要任何其他信息,请与我们联系。谢谢!

编辑:这是我在ifCreate()中选择菜单项的if语句。希望这会有所帮助。当我点击位置== 1然后位置== 2时,图库已经消失,但archived_video_view仍然暂停,所以我只能看到视频库的顶部区域。

          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();
                }
            }
          });

1 个答案:

答案 0 :(得分:4)

VideoViews是SurfaceViews。它们通过有效地将窗口弹出到硬件帧缓冲区来工作。但是你只想在两个SurfaceViews中显示一个这样的硬件帧缓冲,以及用两个MediaPlayers写入。因此,在尝试兼顾多个SurfaceView时会出现许多渲染错误,并且这些错误在不同设备之间不一致。

最简单的答案是不要这样做。将每个VideoView隔离到单独的活动中,或重建您的布局,以便您可以共享单个视频视图。

下一个最简单的答案是不要同时做。在两个视频视图之间切换时,在激活另一个视频视图之前删除一个(从View层次结构中完全删除它)。也许在它们之间使用ImageView占位符来保持UI相对一致,因为用户进行了这样的切换。