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();//
对视频资源进行释放
*
*/