本地视频始终高于其他视图
Local video is always above other views
我们目前正在测试 android (v3.12.3) 的 sinch sdk 并遇到以下问题:本地视图始终位于其他视图之上,即使它在视图层次结构中排在第一位,也应位于视图下方稍后再来——我们想以画中画的形式显示本地视频全屏和远程视频——在这种情况下,本地全屏视频覆盖 pip-view。考虑简单布局
<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 之上。但是如果我们将本地视频添加到 Fullscreen-View - 它会覆盖 Pip-View。将本地视频添加到 Pip 按预期工作 - Pip 在全屏之上。该问题在 Android 仿真器 Android 6.0 和真实设备(三星平板电脑 Android 4.4)
上都可重现
我已经截图说明问题了
我可以确认是这种情况,将在以后的版本中解决。
我找到了解决该问题的方法。我不能称之为真正的解决方案,因为它依赖于从 VideoController
中 return 编辑的某些类型的视图
View remoteView = vc.getRemoteView();
if (remoteView instanceof SurfaceView) {
((SurfaceView) remoteView).setZOrderOnTop(true);
}
只要远程视图是 SurfaceView 类型(实际上是 GLSurfaceView),我们就可以使用 setZOrderOnTop 使其显示在所有 windows 之上。我不能称之为真正的解决方案,因为不能保证从 getRemoteView 编辑的视图 return 将始终是 SurfaceView(或将提供对 surfaceview 的访问)。例如 getLocalView returns 是一个围绕 surfaceview 的包装视图,因此无法合法访问它。我认为可能的解决方案是 return 允许 setZOrderOnTop and/or setZOrderMediaOverlay 调用的 "special" 视图(您可以命名不同的方法以更清楚地解释它们的含义)
我们目前正在测试 android (v3.12.3) 的 sinch sdk 并遇到以下问题:本地视图始终位于其他视图之上,即使它在视图层次结构中排在第一位,也应位于视图下方稍后再来——我们想以画中画的形式显示本地视频全屏和远程视频——在这种情况下,本地全屏视频覆盖 pip-view。考虑简单布局
<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 之上。但是如果我们将本地视频添加到 Fullscreen-View - 它会覆盖 Pip-View。将本地视频添加到 Pip 按预期工作 - Pip 在全屏之上。该问题在 Android 仿真器 Android 6.0 和真实设备(三星平板电脑 Android 4.4)
上都可重现我已经截图说明问题了
我可以确认是这种情况,将在以后的版本中解决。
我找到了解决该问题的方法。我不能称之为真正的解决方案,因为它依赖于从 VideoController
中 return 编辑的某些类型的视图 View remoteView = vc.getRemoteView();
if (remoteView instanceof SurfaceView) {
((SurfaceView) remoteView).setZOrderOnTop(true);
}
只要远程视图是 SurfaceView 类型(实际上是 GLSurfaceView),我们就可以使用 setZOrderOnTop 使其显示在所有 windows 之上。我不能称之为真正的解决方案,因为不能保证从 getRemoteView 编辑的视图 return 将始终是 SurfaceView(或将提供对 surfaceview 的访问)。例如 getLocalView returns 是一个围绕 surfaceview 的包装视图,因此无法合法访问它。我认为可能的解决方案是 return 允许 setZOrderOnTop and/or setZOrderMediaOverlay 调用的 "special" 视图(您可以命名不同的方法以更清楚地解释它们的含义)