我的活动布局如下所示。基本上我左边有一个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();
}
}
});
答案 0 :(得分:4)
VideoViews是SurfaceViews。它们通过有效地将窗口弹出到硬件帧缓冲区来工作。但是你只想在两个SurfaceViews中显示一个这样的硬件帧缓冲,以及用两个MediaPlayers写入。因此,在尝试兼顾多个SurfaceView时会出现许多渲染错误,并且这些错误在不同设备之间不一致。
最简单的答案是不要这样做。将每个VideoView隔离到单独的活动中,或重建您的布局,以便您可以共享单个视频视图。
下一个最简单的答案是不要同时做。在两个视频视图之间切换时,在激活另一个视频视图之前删除一个(从View层次结构中完全删除它)。也许在它们之间使用ImageView占位符来保持UI相对一致,因为用户进行了这样的切换。