Sinch本地相机视图始终位于顶部

时间:2018-11-24 09:10:15

标签: android view sinch

此视图用于显示视频

<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_viewlocal_view重叠。我正在使用BringChildToFront方法将local_view带到前面,但仍然无法正常工作。请帮助我解决此问题。

屏幕截图:- First loaded views

After click

1 个答案:

答案 0 :(得分:1)

由于远程视频和本地视频都是重叠表面,因此像bringChildToFront这样的标准视图层次处理API将无法工作。将覆盖视图视为视频视图上方所有层中的“剪切”矩形孔,这使覆盖始终为“ onTop”。显然,会有冲突,当两个“总在最前面”覆盖意见是重叠的。这已在的 Sinch Android SDK中3.13.0 寻址。请使用VideoController的setLocalVideoZOrder

  

设置是否应在本地视频(来自摄像机的预览)上渲染   删除视频视图的顶部(默认行为),反之亦然   视图是重叠的。 * @param onTopOfRemoteView如果设置为false   将删除在预览顶部呈现的视频。

void setLocalVideoZOrder(boolean onTopOfRemoteView);