VideoView与视频时间、播放进度相关的主要方法。
long getCurrentPosition()
long getDuration()
void seekTo(long millis)
包含VideoView的Activity请实现接口,全部接口及回调如下所示,实际使用中请挑选所需接口实现(若有遗漏请谅解).
public class XunshiVideoDemoActivity extends AppCompatActivity
implements
ExoPlayerListener,
VideoControlsSeekListener,
VideoControlsButtonListener,
VideoControlsVisibilityListener,
OnCompletionListener,
OnPreparedListener,
OnBufferUpdateListener {
@Override
public void onStateChanged(boolean playWhenReady, int playbackState) {
}
@Override
public void onError(ExoMediaPlayer exoMediaPlayer, Exception e) {
}
@Override
public void onVideoSizeChanged(int width, int height, int unAppliedRotationDegrees, float pixelWidthHeightRatio) {
}
@Override
public void onBufferingUpdate(@IntRange(from = 0, to = 100) int percent) {
}
@Override
public void onCompletion() {
}
@Override
public void onPrepared() {
}
@Override
public void onSeekComplete() {
}
@Override
public boolean onPlayPauseClicked() {
return false;
}
@Override
public boolean onPreviousClicked() {
return false;
}
@Override
public boolean onNextClicked() {
return false;
}
@Override
public boolean onRewindClicked() {
return false;
}
@Override
public boolean onFastForwardClicked() {
return false;
}
@Override
public boolean onSeekStarted() {
return false;
}
@Override
public boolean onSeekEnded(long seekTime) {
return false;
}
@Override
public void onControlsShown() {
}
@Override
public void onControlsHidden() {
}
}
//1.控制器的监听
mVideoView.getVideoControls().setVisibilityListener(this);
mVideoView.getVideoControls().setSeekListener(this);
mVideoView.getVideoControls().setButtonListener(this);
//2.播放器的监听
mVideoView.setOnCompletionListener(this);
mVideoView.setOnSeekCompletionListener(this);
mVideoView.setOnPreparedListener(this);
mVideoView.setOnBufferUpdateListener(this);
这里的参数this
是因为Activity实现了接口,也可以直接传匿名函数如下:
mVideoView.setOnBufferUpdateListener(new OnBufferUpdateListener() {
@Override
public void onBufferingUpdate(@IntRange(from = 0, to = 100) int percent) {
//do something
}
});
mVideoView.setOnSeekCompletionListener(this);
@Override
public void onStateChanged(boolean playWhenReady, int playbackState) {
//视频播放状态
}
@Override
public void onError(ExoMediaPlayer exoMediaPlayer, Exception e) {
//报错
}
@Override
public void onVideoSizeChanged(int width, int height, int unAppliedRotationDegrees, float pixelWidthHeightRatio) {
//尺寸
}
@Override
public void onSeekComplete() {
//拖拽进度条结束
}
mVideoView.setOnCompletionListener(this);
@Override
public void onCompletion() {
}
mVideoView.setOnPreparedListener(this);
@Override
public void onPrepared() {
Log.d(TAG, "视频时长=" + mVideoView.getDuration());
}
mVideoView.setOnBufferUpdateListener(this);
@Override
public void onBufferingUpdate(@IntRange(from = 0L, to = 100L) int percent) {
Log.d(TAG, "当前播放时刻=" + mVideoView.getCurrentPosition());
}
OnBufferUpdateListener
监听Log示例:getCurrentPosition()
的值随播放时刻变化而变化,说明此回调是在持续进行监听的.此方法在视频播放完毕后即停止监听,restart()视频也不会再次监听!如果想重新监听有两种方法:
@Override
public void onBufferingUpdate(@IntRange(from = 0L, to = 100L) int percent) {
Log.d(TAG, "onBufferingUpdate.getCurrentPosition():" + mVideoView.getCurrentPosition());
if (mVideoView.getDuration() - mVideoView.getCurrentPosition() < 1000) {
//计算时长小于1000毫秒
//视同视频播放完毕
return;
}
}
mVideoView.getVideoControls().setSeekListener(this);
@Override
public boolean onSeekStarted() {
//开始拖拽时刻
Log.d(TAG, "开始拖拽时刻=" + mVideoView.getCurrentPosition());
return false;
}
@Override
public boolean onSeekEnded(long seekTime) {
//结束拖拽时刻
Log.d(TAG, "结束拖拽时刻=" + mVideoView.getCurrentPosition());
return false;
}
mVideoView.getVideoControls().setButtonListener(this);
@Override
public boolean onPlayPauseClicked() {
//开始/暂停
return false;
}
@Override
public boolean onPreviousClicked() {
//回退
return false;
}
@Override
public boolean onNextClicked() {
return false;
}
@Override
public boolean onRewindClicked() {
//前进
return false;
}
@Override
public boolean onFastForwardClicked() {
//快进
return false;
}
3.VideoControlsVisibilityListener
控制器可见性监听.
mVideoView.getVideoControls().setVisibilityListener(this);
@Override
public void onControlsShown() {
}
@Override
public void onControlsHidden() {
}
相关文章请点击下面链接: