此篇文章主要是对上篇文章地址的优化补充。
一.控制器位置
在给videoView设置控制机MediaController的时候他的位置显示在最底下,导致你每次触碰视频进度条快进快退都出现挡住了导航栏影响用户操作。
解决方法:只需设置mediaController.setPadding(intleft,inttop,intright,intbottom)就可以了。left靠父控件左边的像素距离,top靠上,right靠右,bottom靠下。像我为了给导航栏腾出空间,我就设置成mediaController.setPadding(0,0,0,222)。离底部222像素点当然由于每台设备的像素不一样你也可以通过getResources().getDisplayMetrics().heightPixels得到整个屏幕高再乘以个比例系数。比如:1/10距离底部占整个屏幕的1/10。
二.设置错误监听videoView.setOnErrorListener(errorListener)
我们都知道当URL地址不存在或解析的文件格式不对,视频是无法播放的。为了让用户知道原因我们就需要设置错误监听。
MediaPlayer.OnErrorListener a=new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
};
系统如果识别不了视频会自动出现个弹框“此视频无法播放”,界面真他娘的丑。解决办法把上面的return false改成ture。这个时候你就可以添加你自定义的弹框。
错误码解析对照
switch (what){
case MediaPlayer.MEDIA_ERROR_UNKNOWN: 1
Log.e("text","发生未知错误");
break;
case MediaPlayer.MEDIA_ERROR_SERVER_DIED: 100
Log.e("text","媒体服务器死机");
}
switch (extra){
case MediaPlayer.MEDIA_ERROR_IO: -1004
//io读写错误
Log.e("text","文件或网络相关的IO操作错误");
break;
case MediaPlayer.MEDIA_ERROR_MALFORMED: -1007
//文件格式不支持
Log.e("text","比特流编码标准或文件不符合相关规范");
break;
case MediaPlayer.MEDIA_ERROR_TIMED_OUT: -110
//一些操作需要太长时间来完成,通常超过3 - 5秒。
Log.e("text","操作超时");
break;
case MediaPlayer.MEDIA_ERROR_UNSUPPORTED: -1010
//比特流编码标准或文件符合相关规范,但媒体框架不支持该功能
Log.e("text","比特流编码标准或文件符合相关规范,但媒体框架不支持该功能");