简介
上一篇文章中,我们介绍了使用SeekBar控制视频播放,使用过程中发现,对于一些视频,我们拖动SeekBar
进度条调节播放进度时,调节到指定位置后,进度条会往回跳,并不会在我们拖动位置继续播放。
网上搜索了解到,VideoView.seekTo()
方法的策略决定的。具体看一下seekTo()
方法:
seekTo()
- 如下是
VideoView.seekTo(int msec)
的代码实现,我们就是通过调用该方法实现进度调节。通过查看代码,我们知道该方法实际调用的是MediaPlayer.seekTo(msec);
@Override
public void seekTo(int msec) {
if (isInPlaybackState()) {
mMediaPlayer.seekTo(msec);
mSeekWhenPrepared = 0;
} else {
mSeekWhenPrepared = msec;
}
}
- 继续查看
MediaPlayer.seekTo(msec);
方法的实现,该方法调用seekTo(long msec, @SeekMode int mode)
方法,默认的mode
为SEEK_PREVIOUS_SYNC
。
/**
* Seeks to specified time position.
* Same as {@link #seekTo(long, int)} with {@code mode = SEEK_PREVIOUS_SYNC}.
*
* @param msec the offset in milliseconds from the start to seek to
* @throws IllegalStateException if the internal player engine has not been
* initialized
*/
public void seekTo(int msec) throws IllegalStateException {
seekTo(msec, SEEK_PREVIOUS_SYNC /* mode */);
}
/**
* Moves the media to specified time position by considering the given mode.
* <p>
* When seekTo is finished, the user will be notified via OnSeekComplete supplied by the user.
* There is at most one active