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