背景:
在如今的社交中,短视频和直播的占比还是比较靠前,我们正常使用的有单窗口短视频和支持小窗的多窗口,多窗口理想的状态是大的窗口在底,小窗口在上面,类似微信视频。
问题:
我们在开发中,按图层布局来安排,经常是把大的视频放在最底部,小的视频窗口放在大窗口上面。这样避免小窗口被大窗口遮挡,但是有些机型和我们想的不一样。
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。这样手动处理完,我们就可以
控制小窗一直浮在大的窗口上方。