最近在优化视频播放体验,需要实现视频的横竖屏自动及手动切换,先看看交互原型图
最佳体验
- 通过点击右下角按钮可以实现横竖屏切换;
- 当手机的横竖屏开关打开,可以通过旋转手机实现自动横竖屏切换;
- 当手机的横竖屏开关关闭,实现同方法1。
之前的实现思路是将竖屏的Activity的方向写死为竖屏,点击全屏按钮,跳转到另一个Activity实现全屏播放,这种方法是很有问题的,首先我们不能通过手势转换屏幕实现横竖屏自动切换,其次,在切换横竖屏的过程中要保证播放的连续性,我们必须要对当前的视频维护一个单一的 MediaPalyer,显然这样做太麻烦了,下面来讲第二种思路
通过横竖屏切换,在切换过程中对页面进行适配
关于横竖屏切换过程中Activity生命周期的变化大家可以去网上搜一搜,这里就不说了,我这边采取了是非重启Activity的横竖屏切换,也就是在AndroidManifest.xml注册Activity的时候设置 android:configChanges="orientation|screenSize|keyboardHidden"
,这样在屏幕旋转的时候只会执行onConfigurationChanged
方法
首先,我们需要在onCreate方法中执行一下这句话,因为Activity默认是unspecified
,不设置的话,当手机屏幕旋转开关打开的情况下旋转屏幕,手机不会自动旋转
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
然后是手动切换横竖屏的点击
|
|
最好看一下onConfigurationChanged中的执行方法
通过上面的处理就可以实现视频的横竖屏播放,且不用担心播放的连续性
但是这样还会出现一个问题,在手动切换后,如果我们再切换系统转屏的开关,状态就会乱掉,所以需要第一时间监测开关,并改变当前的设置,方法如下:
在页面初始化的时候注册系统转屏的监听
|
|
这样即可完美实现视频播放过程中的横竖屏切换体验。最好不要忘了在onDestroy中关闭监听
getContentResolver().unregisterContentObserver(rotationObserver);