Android 巧用DecorView实现列表或详情视频播放器竖
2020-12-10 本文已影响0人
30eb7fe7eef0
在平时开发过程中,如果使用到视频播放器的功能,那就一定会涉及到全屏切换的操作
以往常规操作基本如下
- 设置全屏播放步骤
1、横屏
2、视频播放器尺寸调整
3、隐藏其他多余控件 - 恢复小屏播放
1、竖屏
2、调整视频播放器尺寸
3、恢复其余控件 - 或者一些其他操作
1、小屏播放器暂停,记录进度
2、调用全屏播放器播放,指定播放进度
3、恢复的情况下重新设置小屏播放进度
这样的操作在简单的界面可以适用,只要逻辑控制好即可。
弊端:
1、要进行逻辑处理较多,容易出问题
2、在列表等特殊位置的播放器不易控制
3、若使用全屏播放器切换不流畅,有卡顿现象
我们今天要说的是,如何在复杂界面上的视频播放切换,步骤很简单,两步骤,基本使用所有场景。
一、首先要了解一个 Activity 是由哪些部分组成
image.png从上面图片可以看出activity的层级可以看出整个activty的层级其实分为->phoneWindow->DecorView(包含TitleView [例如actionbar,StatusBar等] 和contentView [我们自己编写的界面] )
二、巧妙的利用DecorView层实现视频的全屏播放功能
- 竖屏切换全屏步骤:
1、Activity进行横屏切换
2、从contentView中移除播放器player
3、获取DecorView对象,将移出的player加到DecorView中
4、设置player的全屏播放尺寸 - 全屏还原至竖屏步骤:
1、Activity竖屏切换
2、从DecorView移除player
3、将player再放回去到contentView中
4、设置player竖屏的播放状态
注意事项:
1、每次移除加入的时候确保将其从原控件中移除,否则会报错 xx already has a parent xx 注意规避。
2、切换过程中注意DecorView.setSystemUiVisibility(x) 要注意控制顶部的状态栏样式,切换全屏播放的时候可以将其隐藏,还原小屏的时候再行恢复
3、注意刘海屏或挖孔屏等一些特殊屏幕的适配操作
举一反三:
1、实现播放器悬浮播放也可以参考这种,播放器保持一个对象,移除加入再恢复之类的
欢迎大家留言讨论