重写过的VideoView,可以设置宽高和播放、暂停监听
public class MyVideoView extends VideoView {
private int mVideoWidth;
private int mVideoHeight;
private PlayPauseListener mListener;
public MyVideoView(Context context) {
super(context);
}
public MyVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyVideoView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setPlayPauseListener(PlayPauseListener listener) {
mListener = listener;
}
@Override
public void pause() {
super.pause();
if (mListener != null) {
mListener.onPause();
}
}
@Override
public void start() {
super.start();
if (mListener != null) {
mListener.onPlay();
}
}
interface PlayPauseListener {
void onPlay();
void onPause();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
/* The following code is to make videoView view length-width
based on the parameters you set to decide. */
int width = getDefaultSize(mVideoWidth, widthMeasureSpec);
int height = getDefaultSize(mVideoHeight, heightMeasureSpec);
setMeasuredDimension(width, height);
}
}
String VideoPath="/mnt/sdcard" + File.separator + "ReaderDemo/video"
+"/美队冬兵.MP4";
Uri uri = Uri.parse("http://iuuyuapimg/ban.mp4");
video = (VideoView) findViewById(R.id.video);
MediaController mc = new MediaController(this);
mc.setVisibility(View.INVISIBLE); //隐藏VideoView自带的进度条
video.setMediaController(mc);
//video.setVideoPath(VideoPath);//播放本地视频
video.setVideoURI(uri);//播放网络视频
video.requestFocus();
video.start();//自动开始播放
video.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播放结束后的动作
}
});
((MyVideoView) video)
.setPlayPauseListener(new MyVideoView.PlayPauseListener() {
public void onPlay() {//开始播放监听
}
public void onPause() {
// 暂停播放监听
}
});
video.setOnErrorListener(new OnErrorListener() {
//视频无法播放,执行的操作
return true;
}
});
video.setOnErrorListener(new OnErrorListener() {
//视频无法播放监听
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
finish();
return true;
}
});
//缓冲监听
video.setOnInfoListener(new OnInfoListener() {
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if(what == MediaPlayer.MEDIA_INFO_BUFFERING_START){
Toast.makeText(VideoActivity.this, "正在缓冲", Toast.LENGTH_LONG).show();
}else if(what == MediaPlayer.MEDIA_INFO_BUFFERING_END){
//此接口每次回调完START就回调END,若不加上判断就会出现缓冲图标一闪一闪的卡顿现象
if(mp.isPlaying()){
Toast.makeText(VideoActivity.this, "缓冲结束", Toast.LENGTH_LONG).show();
video.setVisibility(View.VISIBLE);
}
}
return true;
}
});
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override //加载网络资源黑屏结束监听
public void onPrepared(MediaPlayer mediaPlayer) {
//Called when the video is ready to play
}
});