我们正在测试sinch sdk for android(v3.12.3)并遇到以下问题:本地视图始终位于其他视图之上,即使它首先出现在视图层次结构中,并且应位于稍后的视图之下 - 我们希望将本地视频全屏和远程视频显示为画中画 - 在这种情况下,本地全屏视频覆盖了视图。考虑简单的布局
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">
<FrameLayout android:id="@+id/fullscreen_video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<FrameLayout
android:id="@+id/pip_video_view"
android:layout_width="150dp"
android:layout_height="112dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"/>
Pip-View排在最后,通常应该在Fullscreen-View之上。但是,如果我们将本地视频添加到全屏视图 - 它将涵盖Pip-View。将本地视频添加到Pip按预期工作 - Pip高于全屏。这个问题在Android版Android 6.0和Android设备(Android平板电脑和Android 4.4)
上都可以重现答案 0 :(得分:0)
我可以确认是这种情况,它将在未来的版本中得到解决。
答案 1 :(得分:0)
我找到了解决问题的方法。我不能称之为真正的解决方案,因为它依赖于从VideoController返回的某种类型的视图
View remoteView = vc.getRemoteView();
if (remoteView instanceof SurfaceView) {
((SurfaceView) remoteView).setZOrderOnTop(true);
}
只要远程视图是SurfaceView类型(它是实际的GLSurfaceView),我们可以使用setZOrderOnTop使其显示在所有窗口的上方。我不能称之为真正的解决方案,因为无法保证从getRemoteView返回的视图将始终是SurfaceView(或将提供对surfaceview的访问)。例如,getLocalView返回surfaceview周围的包装器视图,因此没有合法的访问权限。我认为可能的解决方案是返回一个允许setZOrderOnTop和/或setZOrderMediaOverlay调用的“特殊”视图(您可以将方法命名为不同,以便更清楚地解释其含义)