Android开发:视频播放横竖屏切换回忆笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Xiong_IT/article/details/52794946

前言

话说这个功能还是两年多前做的,当时博客草稿箱留了这篇博客标题,已经很久了,但是到现在,依旧没有在网上看到一些相关的博客介绍,可能是太简单了?今整理博客,在这将自己的回忆记录成此,如有纰漏,还望斧正。

本文作者MichaelX,博客地址:http://blog.csdn.net/xiong_it,转载请注明出处。

需求

Android客户端视频播放,实现横屏竖屏切换播放。

正常竖屏播放简略图如下
竖屏播放
横屏之后播放区域变为全屏,并且视频播放不中断。

实现过程

在那个ijkplayer还没开源,Vitamio授权收费的时候,笔者选择使用原生MediaPlayer+SurfaceView的方案进行视频播放。

刚开始想的时候是竖屏用一个layout,就是如上图所示的布局,而横屏用一个layout,其中只有一个Surfaceview。即该播放activity有2个layout文件夹:layout-port,layout-landscape。事实证明这个方案不是很好,因为切换layout意味着surface被销毁重建,视频进度需要重新加载缓冲,诸多事件需要重新处理,实现起来不是很好,体验也很差。

然后就想着能不能不切换layout实现直接横屏的全屏播放。当时脑子进了死胡同,忘记播放器下方的控件是可以隐藏的,所以办法就出来了,当需要切换横屏时,将下方控件setVisible(View.GONE)即可。但是还有有一些需要注意的点:

  1. 切换横屏时Activity生命周期处理,不让让其切换屏幕时reCreate()。清单中添加属性解决
  2. 处理横屏后视频大小大小处理,下方控件隐藏起来
  3. 切换回竖屏时视频大小处理,下方控件需重新显示

视频大小的处理:主要是处理一个onVideoSizeChanged(int , int)回调,和一个SurfaceView.setLayoutParams(LayoutParams);其中params参数的params.with和height控制视频画面真实的宽高,可通过更新LayoutParams.with和height来修正SurfaceView的视频画面大小。

总结

虽说视频播放横竖屏切换功能实现很简单,但是笔者当时也是饶了些弯路,仅供读者朋友参考吧。

猜你喜欢

转载自blog.csdn.net/Xiong_IT/article/details/52794946
今日推荐