VideoView的简易视频播放
本次例子使用VideoView 来播放,这个类是继承了SurfaceView 类,并且实现了MediaController.MediaPlayerController 这个用于控制媒体播放的接口
,另外在VideoView上还有一个用于对媒体播放进行控制的面板,包括快进、快退、播放、暂停按钮以及一个进度条,所以做一个初级的视频播放绰绰有余。
/* 设置播放视频时候不需要的部分 ,注意! 以下代码需要写在setContentView方法之前 */
/* 去掉title */
requestWindowFeature(Window.FEATURE_NO_TITLE);
/* 设置全屏 */
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
/* 设置屏幕常亮 *//* flag:标记 ; */
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
第一步:
//网络视频地址
private static final String videoUrl="http://192.168.1.107:8080/SchoolLife/video/xhr.mp4";
//本地视频地址
private static String videoLocation="android.resource://"+getPackageName()+"/"+R.raw.xhr;
//视频控件
private VideoView video;
//视频的高度
private int videoHeight;
//视频的宽度
private int videoWidth;
//声明一个mediacontroller
private MediaController controller;
//当前播放的位置
private int currentPosition=-1;
/**
* 设置视频菜单栏
*/
private void initController() {
controller=new MediaController(this);
video.setMediaController(controller);
//显示状态栏
controller.show(0);
//让videoview能够获取焦点
video.setFocusable(true);
//监听点击上一个,下一个按钮的事件
controller.setPrevNextListeners(new View.OnClickListener() {
@Override
public void onClick(View v) {
//点击播放下一个视频的事件
Toast.makeText(VideoViewActivity.this, "播放下一个视频", Toast.LENGTH_SHORT).show();
}
}, new View.OnClickListener() {
@Override
public void onClick(View v) {
//点击播放上一个视频的事件
Toast.makeText(VideoViewActivity.this, "播放上一个视频", Toast.LENGTH_SHORT).show();
}
});
}
第二步:播放网络上的视频
/**
* 初始化视频播放
*/
private void initVideo(){
//设置要播放的视频地址
video.setVideoPath(videoLocation);
//设置一个准备好了的监听
video.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
//播放视频
video.start();
}
});
initVideoSize(1);
}
private void initVideoSize(int mode) {
if(mode==0) {
//设置视频充满整个屏幕(全屏模式)
RelativeLayout.LayoutParams lp=(RelativeLayout.LayoutParams)video.getLayoutParams();
lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
video.setLayoutParams(lp);
} else {
//设置视频居中模式
RelativeLayout.LayoutParams lp=(RelativeLayout.LayoutParams)video.getLayoutParams();
//获取手机的大小尺寸
DisplayMetrics display=new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(display);
videoHeight=display.heightPixels-30;
videoWidth=display.widthPixels-30;
lp.height=videoHeight;
lp.width=videoWidth;
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
video.setLayoutParams(lp);
}
}
第三步:播放本地视频
/**
* 打开本地播放器播放视频
*/
private void playBySystem(){
//通过传入地址获取一个uri
videoLocation= Environment.getExternalStorageDirectory()+"/xhr.mp4";
Uri uri=Uri.parse(videoLocation);
//跳转到系统播放器界面
Intent intent=new Intent(Intent.ACTION_VIEW);
//设置数据以及类型
intent.setDataAndType(uri,"video/*");
//执行跳转
startActivity(intent);
}
@Override
protected void onPause() {
super.onPause();
//获取当前的视频播放进度
currentPosition=video.getCurrentPosition();
video.stopPlayback();
}
@Override
protected void onResume() {
super.onResume();
if(currentPosition!=-1) {
initVideo();
video.seekTo(currentPosition);
currentPosition=-1;
}
}
最后:两种情况
initController();
initVideo();
是播放网络上的视频;
playBySystem();
是播放本地的视频