localView.setZOrderMediaOverlay(false)不起作用

时间:2016-04-12 12:49:52

标签: android surfaceview

我是android的新手。我默认有2个表面视图(localView和remoteView)我将localView放在remoteView上使用" localView.setZOrderMediaOverlay(true);"。现在一切正常,但我有按钮(交换)交换两个视图的位置,使remoteView应该位于localView之上。我已经制作了#34; localView.setZOrderMediaOverlay(false);"和" remoteView.setZOrderMediaOverlay(true)"在onClickListner但它不起作用。

remoteView未出现在localView之上。我可以看到它在localView后面。

这是我的代码:

        <SurfaceView
            android:id="@+id/remote_surface"
            android:layout_height="fill_parent"
            android:layout_width="fill_parent"
            android:background="@drawable/layout_border"
            />
        <SurfaceView
            android:id="@+id/local_surface"
            android:layout_height="180px"
            android:layout_width="180px"
            android:background="@drawable/layout_border"
            android:layout_alignParentLeft="true"
            android:layout_alignParentBottom="true"/>

提前致谢。

1 个答案:

答案 0 :(得分:0)

正如@Opiatefuchs在评论中指出的那样,the docs表示在设置Surface之后无法更改SurfaceView曲面的Z顺序。

你有几个选择。一种可能性是改变曲面的绘制方式。例如,如果两者都是使用OpenGL ES绘制的,那么您只需交换与渲染器关联的EGL上下文。 (或者,就此而言,在单个SurfaceView上绘制所有内容,并反转呈现内容的顺序或深度。)

对于其他数据来源,例如MediaPlayer,它可能不是那么简单或无缝。使用TextureView替换SurfaceView可能是值得的,因为可以像任何其他视图一样通过布局进行排序。由于额外的副本,这可能比SurfaceView效率低。