VideoView+MediaController横向全屏视频播放+缓冲监听

VideoView+MediaController横向全屏视频播放+缓冲监听,第1张

VideoView继承了SurfaceView同时实现了MediaPlayerControl接口,MediaController是安卓封装的辅助控制器,带有暂停,播放,停止,进度条等控件。通过VideoView+MediaController可以很轻松的实现视频播放、停止、快进、快退等功能。

重写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//改变全屏/窗口的标记

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8047529.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存