android之VideoView和SurfaceView

本文介绍了Android中用于播放视频的两种组件VideoView和SurfaceView,详细讲解了如何使用setVideoPath()和setVideoURI()方法加载视频,并通过setMediaController()设置MediaController来提供播放控制功能,包括暂停、播放、快进、快退以及显示进度条和时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


VideoView
介绍:继承于SurfaceView,主要用来播放加载视频

特点:集成度高,开发难度小,只是灵活性差。
注意:默认的videoView不能全屏播放,要全屏需要自定义重写onMeasure()方法,将多余的空间释放出来,如下:
protected voidonMeasure(intwidthMeasureSpec,intheightMeasureSpec) {
intwidthSize=MeasureSpec.getSize(widthMeasureSpec);
intheightSize=MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(widthSize,heightSize);

主要方法介绍:
  • setVidePath(String path):加载path文件代表的视频

  • setVideoURI(Uri uri):加载uri所对应的视频

  • setMediaController(MediaController controller):加载一个MediaController ,自带暂停、播放、快进、快退按钮以及进度条和时间。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//设置横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//设置竖屏

//播放本地raw资源
vv.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.splash_1));
注意:需要新建一个raw文件夹并把所需的资源放入

//播放sd卡里的视频文件
.setVidoURI(Uri.fromFile(new File("文件路径")))
注意:获取sd卡里的文件时需要读取权限

监听事件:
//视频播放完成时的回调
vv.setOnCompletionListener(newMediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayermp) {
vv.start();//实现循环播放
}
});
//播放视频时出错的回调
vv.setOnErrorListener(newMediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayermp,intwhat,intextra) {
return false;
}
});
//播放视频前的回调
vv.setOnPreparedListener(newMediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayermp) {
intduration=mp.getDuration();//时长
intcurrentPosition=mp.getCurrentPosition();//播放的位置
}
});
使用步骤:
1、在界面布局文件中定义VideoView组件,或在程序中创建VideoView组件
2、调用VideoView的如下两个方法来加载指定的视频
  • setVideoURI(Uri uri)
  • setMediaController(MediaController controller)
3、调用VideoView的start()播放
4、设置videoView的监听事件


SurfaceView
**
* Surfaceview特性:
* 1.可以在子线程绘制界面
* 2.只在surfaceCreated方法被调用后才可以进行绘制,surfaceDestroyed前结束绘制
*
* Surfaceview的使用:
1.在布局文件中定义Surface组件和相关控件(例如进度条Seekbar)并设置id,在代码中声明绑定
2.通过继承SurfaceHolder.Callback,并重写surfaceCreated(),surfaceDestroyed,surfaceChanged()
获得holder控制器来控制SurfaceView
注意:最主要的是前两个方法
3.获取SurfaceHolder对象 ,Surface对象.getHolder()
4.注册SurfaceView的生命周期方法
SurfaceHolder对象.addCallback(this);
5.新建MediaPlayer对象,并设置点击事件setOnPreparedListener()视频播放前的相关操作:
mediaPlayer.start();// 开始播放视频
longduration =mp.getDuration();// 单位:毫秒
longcurrentPosition =mp.getCurrentPosition();
seekBar.setMax((int) duration);// 初始化seekbar
seekBar.setProgress((int) currentPosition);
tvDuration.setText((int) (duration / 1000) +"");// 要求显示秒
tvCurrentT.setText((int) (currentPosition / 1000) +"");// 要求显示秒
updateView();// 启动视频界面更新的业务
6.在surfaceCreated(),将mediaPlayer对象和SufaceHolder进行关联操作
mediaPlayer.setDisplay(surfaceHolder);// 将视频控制器和界面显示控制器进行绑定
mediaPlayer.setDataSource(Context context,Uri uri);//uri为视频资源链接
mediaPlayer.prepareAsync();// 准备进行异步播放视频
7.在sufaceDestroyed()方法里,进行mediaPlayer的停止和销毁.
mediaPlayer.stop();// 停止播放视频
mediaPlayer.release();// 对视频资源进行释放

*
*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值