2010-05-30 487 views
2

我试图在另一个视频视图上播放videoview。第一个视频视图暂停,而第二个正在播放。它似乎工作,但没有第二个视频出现在屏幕上(虽然我听到音频,看到通常会出现在顶部的控件)。我认为这是某种订单问题。有什么想法吗。顺便说一下,在主视频视图顶部显示其他视图并让视频填充背景时,我没有任何问题。Android VideoView同时播放2个视频

回答

3

这是行不通的 - VideoView是特殊的,它在正常视图中打出一个洞,允许直接访问显示像素(或者,在android中,'Surface' - VideoView是SurfaceView的子类)。你不能将两个SurfaceView放在彼此之上 - 第一个抓住像素(Surface)的将会“拥有”它。 (见SurfaceHolder.Callback.surfaceCreated()/ surfaceDestroyed())

在SurfaceView 的顶部其它视图做工作,这是因为框架将构成上表面的顶部正常视图的显示位。它不能用另一个VideoView(即SurfaceView)来完成,因为没有任何东西可以编写。

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开始播放videoView1无形的setvisibilty 。 然后您可以在需要时使其可见。

0

我不知道这是目前帮助,但我设法得到类似于你想要什么东西......

我需要窝在SurfaceView顶部的VideoView;只要它们不重叠100%就可以工作。 (我的意思是,我的表面视图是整个屏幕,而videoview只是屏幕的一小部分)

事情是 - 因为你不能组成SurfaceViews,第一个抓取像素是将被显示。直观性会促使你在优先视图中对Z进行排序 - 在XML中不太重要的视图之后 - 但正如我之前所说的,第一个抓住像素的方法仍然存在,因此请确保定义较小的视图FIRST,然后覆盖它与更大的一个。

这将导致这样的行为,即较小(在我的情况下,预览视图)获取所述X * Y像素,然后获取'背景'surfaceview(根据XML应该在其之上)占据其余部分并忽略较小的表面。

我不太清楚处理来自这两个事件的事件,但我只需要在这两个视图中播放流,而不会对由这两个组件产生的任何类型的点击/事件作出反应,但可能会发现如果你遵循这条路线 - 更大的视图将拦截在较小的视图区域中进行的所有点击(因为它根据XML在最上面),所以也许你必须在创建时以编程方式将它移动到顶部。

希望它有帮助。

编辑: 虽然......它就像它只是一次。这真的是一项进展中的工作。当从任何活动回来,有什么我可以做,以防止更大的观点,声称一切:/

1

使用Thread同时控制视频

0

,你可以在上面videoview b。添加videoview一个,这样,

 parentview.removeview(a); 
    parentview.removviewe(b); 
    parentview.addview(a); 
    parentview.addview(b); 
parentview.invalidate(); 

Ti为我工作。我希望它可以帮助。