重写VideoView实现全屏
布局直接布局引用
VideoView与MediaController建立关联
在控制器Activity设置清单文件
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="landscape" //Activity 初始默认横竖屏状态
备注:对android:configChanges属性,一般认为有以下几点:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
但是,自从Android 3.2(API 13),在设置Activity的android:configChanges="orientation|keyboardHidden"后,还是一样会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation",你还必须设置"ScreenSize"。
设置缓冲状态监听,第一次加载视频的时候不会走缓冲状态,第一次视频加载出来会走 播放状态,然后以后缓存的同时会走缓存状态
首先我们上传一个视频文件到手机做为测试,我用的是Genymotion模拟器,所以只要简单拖拽就可以实现上传了,这个模拟器速度超快,非常适合开发者使用。上传后可以看到已经把视频文件放到了/sdcard/download目录下面。我们需要记住这个路径,在VideoView的属性里需要用到。通过模拟机手机里面的文件管理器来到相应的目录下,确保视频文件正常上传到手机了。
接下来我们来拖拽创建一个VideoView控件。
或手写xml代码来创建。
接下来在代码部分,我们就可以使用这个控件了。我先让程序运行时屏幕是水平显示的。就是我们横卧手机的显示。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
然后我们需要设置一下videoView正常运行的几个关键参数。
vd.setVideoPath("/sdcard/download/videoviewdemo.mp4")设置了要播放的视频文件位置。
vd.setMediaController(new MediaController(this))设置了一个播放控制器。
vd.start()程序运行时自动开始播放视频。
vd.requestFocus()播放窗口为当前窗口
我们来看看运行的效果。可以正常播放了,这篇只是简单的介绍了videoView的用法,更详细的使用,我会陆续发布新的经验,欢迎留言关注。
您好,您这样:1、在你自定义的View中重写onMeasure方法
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = getDefaultSize(0, widthMeasureSpec)
int height = getDefaultSize(0, heightMeasureSpec)
setMeasuredDimension(width, height)
}
2、按钮的事件中写上判断,视频的控件用相对布局包裹下
if(!fullscreen){//设置RelativeLayout的全屏模式
RelativeLayout.LayoutParams layoutParams=
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT)
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP)
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT)
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT)
mVideoView01.setLayoutParams(layoutParams)
fullscreen = true//改变全屏/窗口的标记
}else{//设置RelativeLayout的窗口模式
RelativeLayout.LayoutParams lp=new RelativeLayout.LayoutParams(320,240)
lp.addRule(RelativeLayout.CENTER_IN_PARENT)
mVideoView01.setLayoutParams(lp)
fullscreen = false//改变全屏/窗口的标记
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)