Android 两个surfaceView覆盖不显示,视频小窗被遮挡有声音无画面

背景:

在如今的社交中,短视频和直播的占比还是比较靠前,我们正常使用的有单窗口短视频和支持小窗的多窗口,多窗口理想的状态是大的窗口在底,小窗口在上面,类似微信视频。

问题:

我们在开发中,按图层布局来安排,经常是把大的视频放在最底部,小的视频窗口放在大窗口上面。这样避免小窗口被大窗口遮挡,但是有些机型和我们想的不一样。

1.我们在处理连麦中,特别是视频连麦或者视频通话,是一个大的窗口和一个小的窗口,在调试过程中,发现小窗口有声音但是无画面或者不显示,只有大窗口surfaceView正常显示,是因为部分设备的surfaceView的大窗口把小窗口遮挡住了。

原因:

是因为surfaceView是独立的window窗口,即使你在layout中设置好显示的层级关系,但是surfaceView不受Activity的窗口控制,所以在这种情况,在显示的时候要需要我们代码设置,指定哪个优先在上层。

private void initSetSurFaceViewHolder(SurfaceView surfaceView) {
    SurfaceHolder holder = surfaceView.getHolder();
    if (holder == null)
        return;
    holder.setKeepScreenOn(true);
    holder.setFormat(PixelFormat.TRANSPARENT);
    surfaceView.setZOrderOnTop(true);
    surfaceView.setZOrderMediaOverlay(true);

}

SurfaceView提供了图层管理,可以将自己所在的系统窗口提到top。这样手动处理完,我们就可以

控制小窗一直浮在大的窗口上方。

猜你喜欢

转载自blog.csdn.net/qq36246172/article/details/112572982
今日推荐