在安卓开发中,使用VideoView播放视频时,我们有时候需要对视频的暂停播放事件进行控制,例如当我们点击暂停按钮时弹出一个广告等等。。这就需要我们得到这个暂停事件并进行后序代码操作。
原理很简单:编写一个继承自VideoView类的子类,重新VideoView的中的pause()和start()函数。废话不多说,直接看代码。
import android.content.Context;
import android.util.AttributeSet;
import android.widget.VideoView;
public class CustomVideoView extends VideoView {
private PlayPauseListener mListener;
public CustomVideoView(Context context) {
super(context);
}
public CustomVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomVideoView(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();
}
}
public static interface PlayPauseListener {
void onPlay();
void onPause();
}
}
上述代码中我们自定义了一个监听器PlayPauseListener,里面包含两个函数onPlay()和onPause(),这两个函数是我们在外面要调用的。然后我们重写pause()和start()函数,当视频暂停时pause()会自动执行,它调用了我们的onPause()。因此有onPause()中可以添加我们需要的操作。下面的代码说明了使用过程:
CustomVideoView cVideoView = (CustomVideoView) findViewById(R.id.custom_videoview);
cVideoView.setPlayPauseListener(new CustomVideoView.PlayPauseListener() {
@Override
public void onPlay() {
System.out.println("Play!");//our needed process when the video is started
}
@Override
public void onPause() {
System.out.println("Pause!");//our needed process when the video is paused
}
});
cVideoView.setMediaController(new MediaController(this));
cVideoView.setVideoURI(...);
// or
cVideoView.setVideoPath(...);
// Some other code below...
最后注意一下xml中的写法,就不能是<VideoView>了,应该是<package_name>.CustomVideoView。例如:example.test.CustomVideoView。