我正在尝试在另一个视频视图之上播放videoview
。第一个视频视图暂停,第二个视频播放。它似乎工作但屏幕上没有第二个视频出现(虽然我听到音频并看到通常会出现在顶部的控件)。我假设这是某种订单问题。有什么想法吗。顺便说一句,我可以在主视频视图的顶部显示其他视图并让视频填充背景。
答案 0 :(得分:3)
这不起作用 - VideoView是特殊的,它在正常视图中“打孔”一个洞,允许直接访问显示像素(或者,在Android术语中,'Surface' - VideoView是一个SurfaceView的子类)。你不能将两个SurfaceViews层叠在一起 - 第一个抓住像素(Surface)将“拥有”它。 (参见SurfaceHolder.Callback.surfaceCreated()/ surfaceDestroyed())
在SurfaceView 执行之上的其他视图工作,因为框架将组成Surface顶部的普通视图的显示位。它无法与另一个VideoView(即SurfaceView)一起使用,因为没有任何东西可以编写。
答案 1 :(得分:1)
<VideoView android:id="@+id/videoView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<VideoView android:id="@+id/videoView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
当videoView2开始播放viewView1不可见的setvisibilty时。 那么你可以在需要的时候让它可见。
答案 2 :(得分:1)
使用Thread
来控制两个视频
答案 3 :(得分:0)
我不知道目前这是否有用,但我设法获得了类似于你想要的东西......
我需要在SurfaceView上嵌套VideoView;只要它们不重叠100%就可以工作。 (我的意思是,我的表面视图是整个屏幕,视频视图只是屏幕的一小部分)
事情是 - 因为你无法构建SurfaceViews,所以第一个获取像素的是将要显示的像素。直觉性将驱动您在XML中不太重要的视图之后对您的优先级视图进行Z顺序 - 但正如我之前所说的,第一个抓住像素的视图仍保留,因此请确保将较小的视图定义为FIRST,然后用更大的一个覆盖它。
这将导致这样的行为,即较小的(在我的情况下是预览视图)获取所述X * Y像素,然后“背景”表面视图(根据XML应该在它上面)其余部分忽略较小的表面。
我不太确定处理来自这两个事件的事件,因为我只需要在这两个视图中播放流并且不对这两个组件生成的任何类型的点击/事件做出反应,但可能会预期如果你遵循这条路线 - 更大的视图将拦截在较小的视图区域中进行的所有点击(因为它根据XML排在最前面)所以也许你必须以编程的方式在创建时将它移到顶部。
希望它有所帮助。
编辑: 虽然......它只是运作一次。这真的是一项正在进行的工作。从任何活动返回后,我无能为力阻止更大的观点声称一切:/
答案 4 :(得分:0)
你可以在topview video b上添加videoview a,像这样,
parentview.removeview(a);
parentview.removviewe(b);
parentview.addview(a);
parentview.addview(b);
parentview.invalidate();
Ti对我有用。我希望它能有所帮助。