Android 播放视频常见问题小结
在android 开发中常见到视频播放的问题,在常规的视频中 有直接用videoView + MediaController 或者 mediaController + serfercie holder
常见的问题
1 在播放中如何处理播放器的横屏切换 和 播放器上的文案显示的布局变化
在activity 中 设置
android:configChanges="orientation|screenSize"
这样在旋转中,activity 就不会重建
重写系统方法
public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { initVideoLandLayout(); } else { initVideoPortLayout(); } }
通过 判断 newConfig.orientation 来判断 当前是横屏还是竖屏, 这个是在看视频的过程中去判断是不是横屏还是竖屏,在我门一开始播放视频的时候,也可以去判断,具体的处理方法是
private void initVideoPlayerLayout() { DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); width = dm.widthPixels; heigh = dm.heightPixels; if (width / heigh > 0) { // 横屏 initVideoLandLayout(); fullscreen = true; } if (width / heigh == 0) { //竖屏 initVideoPortLayout(); } }
在具体变化播放器上的布局的时候我们可以动态的去更换
private void initVideoPortLayout() { RelativeLayout.LayoutParams videoLp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); videoLp.addRule(RelativeLayout.CENTER_IN_PARENT); videoView.setLayoutParams(videoLp); videoView.start(); RelativeLayout.LayoutParams hotelInfoLp = new RelativeLayout.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); }
这是竖屏处理
private void initVideoLandLayout() { RelativeLayout.LayoutParams layoutParams = new RelativeLayout.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.LayoutParams hotelInfoLp = new RelativeLayout.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 public boolean onTouchEvent(MotionEvent ev) { if (isInPlaybackState() && mMediaController != null) { toggleMediaControlsVisiblity(); } return false; }
再朝下看
private void toggleMediaControlsVisiblity() { if (mMediaController.isShowing()) { mMediaController.hide(); } else { mMediaController.show(); } }
最终调的是 mMediaController.hide(); 和 mMediaController.show(),
所以我门在自己的播放器界面要是实现自己的布局和播放器进度条 重写hide() 和 show() 方法即可
以上所述是小编给大家介绍的Android 播放视频常见问题小结,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对脚本之家网站的支持!
相关文章
Android ListView用EditText实现搜索功能效果
本篇文章主要介绍了Android ListView用EditText实现搜索功能效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。2017-03-03Android基于BaseExpandableListAdapter实现的二级列表仿通话记录功能详解
这篇文章主要介绍了Android基于BaseExpandableListAdapter实现的二级列表仿通话记录功能,结合具体实例形式分析了Android实现通话记录功能的布局与功能相关操作技巧,需要的朋友可以参考下2017-07-07Android Gradle Build Error:Some file crunching failed, see l
这篇文章主要介绍了Android Gradle Build Error:Some file crunching failed, see logs for details解决办法的相关资料,需要的朋友可以参考下2016-11-11Android 使用maven publish插件发布产物(aar)流程实践
这篇文章主要介绍了Android 使用maven publish插件发布产物(aar)流程实践,Android Gradle插件根据项目gradle中应用不同的插件类型在编译组装后会生成不同的产物,具体相关介绍,需要的小伙伴可以参考一下2022-09-09
最新评论