Android 播放视频常见问题小结
在android开发中常见到视频播放的问题,在常规的视频中有直接用videoView+MediaController或者mediaController+serfercieholder
常见的问题
1在播放中如何处理播放器的横屏切换和播放器上的文案显示的布局变化
在activity中设置
android:configChanges="orientation|screenSize"
这样在旋转中,activity就不会重建
重写系统方法
publicvoidonConfigurationChanged(ConfigurationnewConfig){ //TODOAuto-generatedmethodstub super.onConfigurationChanged(newConfig); if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){ initVideoLandLayout(); }else{ initVideoPortLayout(); } }
通过判断newConfig.orientation来判断当前是横屏还是竖屏,这个是在看视频的过程中去判断是不是横屏还是竖屏,在我门一开始播放视频的时候,也可以去判断,具体的处理方法是
privatevoidinitVideoPlayerLayout(){ DisplayMetricsdm=newDisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); width=dm.widthPixels; heigh=dm.heightPixels; if(width/heigh>0){//横屏 initVideoLandLayout(); fullscreen=true; } if(width/heigh==0){//竖屏 initVideoPortLayout(); } }
在具体变化播放器上的布局的时候我们可以动态的去更换
privatevoidinitVideoPortLayout(){ RelativeLayout.LayoutParamsvideoLp=newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT); videoLp.addRule(RelativeLayout.CENTER_IN_PARENT); videoView.setLayoutParams(videoLp); videoView.start(); RelativeLayout.LayoutParamshotelInfoLp=newRelativeLayout.LayoutParams(DeviceInfoUtil.getPixelFromDip(200),DeviceInfoUtil.getPixelFromDip(55)); hotelInfoLp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); hotelInfoLp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); hotelInfoLp.rightMargin=DeviceInfoUtil.getPixelFromDip(8); hotelInfoLp.bottomMargin=DeviceInfoUtil.getPixelFromDip(90); mHotelInfoLayout.setLayoutParams(hotelInfoLp); }
这是竖屏处理
privatevoidinitVideoLandLayout(){ RelativeLayout.LayoutParamslayoutParams= newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.FILL_PARENT); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); videoView.setLayoutParams(layoutParams); RelativeLayout.LayoutParamshotelInfoLp=newRelativeLayout.LayoutParams(DeviceInfoUtil.getPixelFromDip(200),DeviceInfoUtil.getPixelFromDip(55)); hotelInfoLp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); hotelInfoLp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); hotelInfoLp.rightMargin=DeviceInfoUtil.getPixelFromDip(8); hotelInfoLp.bottomMargin=DeviceInfoUtil.getPixelFromDip(95); mHotelInfoLayout.setLayoutParams(hotelInfoLp); }
这是横屏处理
我门知道系统的videoView控件自带有播放,暂停等进度条这是MediaContronller当我们手点击的时候进度条会显示,手离开界面的时候,会不显示,这是videoView中的方法
@Override publicbooleanonTouchEvent(MotionEventev){ if(isInPlaybackState()&&mMediaController!=null){ toggleMediaControlsVisiblity(); } returnfalse; }
再朝下看
privatevoidtoggleMediaControlsVisiblity(){ if(mMediaController.isShowing()){ mMediaController.hide(); }else{ mMediaController.show(); } }
最终调的是mMediaController.hide();和mMediaController.show(),
所以我门在自己的播放器界面要是实现自己的布局和播放器进度条重写hide()和show()方法即可
以上所述是小编给大家介绍的Android播放视频常见问题小结,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对毛票票网站的支持!