此视图用于显示视频
<FrameLayout
android:id="@+id/remoteViewLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/remote_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<RelativeLayout
android:id="@+id/local_view"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_gravity="bottom|right" />
</FrameLayout>
在点击local_view
时,我需要从两个RelativeLayout
中删除视图,然后在不同的位置再次添加它们。我正在使用标志来了解当前加载的视图。
private String loadedView = "1";
binding.contentSinchIncomingCall.localView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (videoController == null) {
videoController = mSinchServiceInterface.getVideoController();
}
if (loadedView.equals("1")) {
loadedView = "2";
((ViewGroup) videoController.getLocalView().getParent()).removeView(videoController.getLocalView());
((ViewGroup) videoController.getRemoteView().getParent()).removeView(videoController.getRemoteView());
binding.contentSinchIncomingCall.remoteView.addView(videoController.getLocalView());
binding.contentSinchIncomingCall.localView.addView(videoController.getRemoteView());
binding.contentSinchIncomingCall.localView.requestLayout();
binding.contentSinchIncomingCall.localView.invalidate();
binding.contentSinchIncomingCall.remoteViewLayout.bringChildToFront(binding.contentSinchIncomingCall.localView);
} else {
loadedView = "1";
((ViewGroup) videoController.getLocalView().getParent()).removeView(videoController.getLocalView());
((ViewGroup) videoController.getRemoteView().getParent()).removeView(videoController.getRemoteView());
binding.contentSinchIncomingCall.remoteView.addView(videoController.getRemoteView());
binding.contentSinchIncomingCall.localView.addView(videoController.getLocalView());
binding.contentSinchIncomingCall.localView.requestLayout();
binding.contentSinchIncomingCall.localView.invalidate();
binding.contentSinchIncomingCall.remoteViewLayout.bringChildToFront(binding.contentSinchIncomingCall.localView);
}
}
});
但是在更改位置后,remote_view
与local_view
重叠。我正在使用BringChildToFront方法将local_view
带到前面,但仍然无法正常工作。请帮助我解决此问题。
答案 0 :(得分:1)
由于远程视频和本地视频都是重叠表面,因此像bringChildToFront
这样的标准视图层次处理API将无法工作。将覆盖视图视为视频视图上方所有层中的“剪切”矩形孔,这使覆盖始终为“ onTop”。显然,会有冲突,当两个“总在最前面”覆盖意见是重叠的。这已在的 Sinch Android SDK中3.13.0 强>寻址。请使用VideoController的setLocalVideoZOrder
:
设置是否应在本地视频(来自摄像机的预览)上渲染 删除视频视图的顶部(默认行为),反之亦然 视图是重叠的。 * @param onTopOfRemoteView如果设置为false 将删除在预览顶部呈现的视频。
void setLocalVideoZOrder(boolean onTopOfRemoteView);