android之VideoView和SurfaceView

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

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


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

特点: 集成度高,开发难度小,只是灵活性差。
注意:默认的videoView不能全屏播放,要全屏需要自定义重写 onMeasure()方法,将多余的空间释放出来,如下:
protected void onMeasure ( int widthMeasureSpec , int heightMeasureSpec ) {
int widthSize= MeasureSpec . getSize ( widthMeasureSpec );
int heightSize= 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( new MediaPlayer.OnCompletionListener () {
@Override
public void onCompletion ( MediaPlayer mp ) {
vv .start(); //实现循环播放
}
});
//播放视频时出错的回调
vv .setOnErrorListener( new MediaPlayer.OnErrorListener () {
@Override
public boolean onError ( MediaPlayer mp , int what , int extra ) {
return false ;
}
});
//播放视频前的回调
vv .setOnPreparedListener( new MediaPlayer.OnPreparedListener () {
@Override
public void onPrepared ( MediaPlayer mp ) {
int duration= mp .getDuration(); //时长
int currentPosition= 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(); // 开始播放视频
long duration = mp .getDuration(); // 单位:毫秒
long currentPosition = 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、付费专栏及课程。

余额充值