昨天是双12的最后一天,支付宝口碑公布的数据显示,双12活动三天,累计参与的消费者数超1亿。仅12月10日一天,就有4900万人走上街头,用支付宝搞定了自己的吃喝玩乐,“85后”的年轻人占到66%。主打“5折”的餐饮类,是人流量最大的,其次是超市。但是对于其他领域的商家来说,双12的影响却不是那么大。
本篇来自 niorgai 的投稿,篇幅不长,介绍了如何使用 VideoView,适合还未接触的朋友阅读。文末提及的 ExoPlayer,感兴趣的朋友可以关注下。
niorgai 的博客地址:
http://niorgai.github.io
Android 上原生的控件 VideoView 当然是做视频播放的首选,使用简单,下面介绍一下自己在项目使用过程中的一些注意点.
1. 宽高问题
(1). 由 VideoView 的源码可知,不管你设置的 View 的宽高是多少, VideoView 会根据视频文件的宽高重新设置 View 的宽高,最终显示效果类似于 ImageView 的 FIT_CENTER.
(2). 如果想自定义宽高,做到 FIT_XY 的效果,就需要继承 VideoView 重写 onMeasure 方法.
2. 播放和暂停/恢复
(1). 播放调用 setVideoPath() 或 setVideoURI() 即可, VideoView 会异步加载视频,加载完毕回调 OnPreparedListener() .如果播放本地视频,放进 raw 文件夹,如 video_guide.mp4.
(2). 暂停: pause().
(3). 恢复: start().注意这里不要调用 resume().
3. 进度条
(1). 进度检测
UI中一般会有一个 SeekBar 来显示当前播放进度,这里我采取是定时刷新的的办法:
mSeekBar.setMax(mp.getDuration());
mSeekBar.setProgress(mVideoView.getCurrentPosition()).
(2). 进度条拖动,必然是通过 OnSeekBarChangeListener() 监控.
4. 显示和隐藏 Loading 图
如果播放网络视频,难免会遇到缓冲的情况,除了视频需要切片之外,客户端还需要监听缓冲状态以显示/隐藏 Loading 图.
5. “无法加载此视频”的提示
如果是一个无法播放的视频,会弹出一个”无法播放此视频”的 Dialog. 从体验的角度来说就算无法播放也不能用这样的 Dialog 来提示,查看源码可知, 只需要为 VideoView 设置 OnErrorListener() 即可.
6. 横竖屏切换
视频当然是全屏播放最好,此时就需要将 Activity 变为横屏.
(1). 在 AndroidManifest.xml 设置当前 Activity 的 configChanges 属性.
android:configChanges="orientation"
(2). 通过代码改变当前 Activity 的横竖屏.
(3). 在 View 或 Activity 的 onConfigurationChanged() 回调中处理横竖屏切换.
7. 切换后台或打开新页面(即经过 Activity 的 onStop() 生命周期
因为 VideoView 继承了 SurfaceView , 在 Activity 的 onStop() 生命周期中会调用 surfaceDestroyed(), 此时会释放 MediaPlayer, 所以当切换后台或打开新页面回来,视频就会重头播放,暂时还没想到解决办法.
以上就是关于原生 VideoView 的简单使用, 下一步我考虑切换到 Google 的
ExoPlayer
https://github.com/google/ExoPlayer
如果使用顺利我会继续总结.
每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。
如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。
欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号: