最近在项目中开发视频会议模块总结一下遇到的问题,
- 每个用户的流控和视图SurfaceView一一绑定的,所以切换C位视图的时候需要动态的切换View视图以及数据。
- 横竖屏切换的时候,view不能被销毁,需要配置configChanges ="orientation | screenSize",然后在onConfigurationChanged方法里做处理。
- 还有就是横竖屏切换的时候,横屏布局和竖屏布局UI位置变化了,用两套布局的话需要重新setContentView,但是用户一一绑定的SurfaceView,set的话会导致黑帧无法加载视频,所以需要保证在所有view是不变、是同一个的前提下来切换屏幕。
今天主要通过Android的约束布局ConstraintLayout来实现该功能。
在屏幕旋转之后onConfigurationChanged方法中判断当前是横屏还是竖屏,然后约束不同的位置:
- 首先,我们通过ConstraintSet对象将xml里面的子控件(属性)先clone下来;
- 其次,clear掉view原有的约束;
- 然后,重新约束它的位置,通过2种方法进行约束,一种是通过LayoutParms进行约束,一种是ConstraintSet对象提供了connect方法进行约束;
- 最后,applyTo到该根布局上。
注意:每个View必须要有ID,否则会抛出异常
以下是code展示:
ConstraintSet constraintSet = new