Android 巧用DecorView实现列表或详情视频播放器竖屏及全屏切换

  在平时开发过程中,如果使用到视频播放器的功能,那就一定会涉及到全屏切换的操作

以往常规操作基本如下

  • 设置全屏播放步骤
    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、实现播放器悬浮播放也可以参考这种,播放器保持一个对象,移除加入再恢复之类的



欢迎大家留言讨论

你可能感兴趣的:(Android 巧用DecorView实现列表或详情视频播放器竖屏及全屏切换)