我正在使用VideoView并搜索栏,但是当我通过seekBar搜索所需位置时,它会从开始播放视频。
我尝试这段代码:
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { mVideoView.seekTo(progress); }
答案 0 :(得分:25)
VideoView
没有OnSeekCompleteListener()
,但您可以从MediaPlayer
的{{1}}方法访问onPrepared
,然后设置VideoView
},像这样:
OnSeekCompleteListener
答案 1 :(得分:4)
对VideoView.seekTo()
的调用是MediaPlayer.seekTo()
的包装。即使仍在执行实际搜索,此函数几乎立即返回。因此,您希望等待寻求通过MediaPlayer.OnSeekCompleteListener
完成。
但是,正如Reno所提到的,标准VideoView
不支持OnSeekCompleteListener
。
但您可以复制并本地自定义VideoView
课程,以自行添加此支持。
首先,从VideoView.java的副本开始。或者您可以克隆整个frameworks/base回购,但警告它要下载超过1 gig的数据。
将VideoView.java复制到Eclipse Android项目中,它将开始构建但失败。以下是我为编译而做的工作:
MetaData
的引用。对此的修复是在我的待办事项列表上。这些内容需要通过调用MediaMetadataRetriever
来替换。mContext
getBaseContext()
醇>
现在您已准备好添加OnSeekCompleteListener
的代码。实现类似于其他听众,即OnCompletionListener
。
public class VideoView extends SurfaceView
implements MediaPlayerControl {
// The client's listener which is the notification callback.
private OnSeekCompleteListener mOnSeekCompleteListener;
// Set up MediaPlayer to forward notifications to client.
private MediaPlayer.OnSeekCompleteListener mSeekCompleteListener =
new MediaPlayer.OnSeekCompleteListener() {
public void onSeekComplete(MediaPlayer mp) {
if (mOnCompletionListener != null) {
mOnCompletionListener.onCompletion(mMediaPlayer);
}
}
};
// API for client to set their listener.
public void setOnSeekCompleteListener(OnSeekCompleteListener l)
{
mOnSeekCompleteListener = l;
}
}
最后,更新您自己的代码:
android.widget.VideoView
的引用,以使用您自定义的VideoView
。setOnSeekCompleteListener()
实现侦听器并进行设置。您的代码现在会在搜索完成后收到通知,然后可以执行后续搜索。
答案 2 :(得分:3)
您必须等待搜索完成,遗憾的是VideoView
没有OnSeekCompleteListener()
(为什么选择Google?-_-)
答案 3 :(得分:0)
您应该使用
mVideoView.seekTo(进度,SEEK_CLOSEST)
答案 4 :(得分:0)
使用我的方法就像魅力
1) Take mediaPlayer
MediaPlayer mediaPlayer;
2) init mediaPlayer
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer = mp;
}
});
3) use seekTo method like this
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mediaPlayer.seekTo((int) mStartPosition, MediaPlayer.SEEK_CLOSEST);
} else {
mediaPlayer.seekTo((int) mStartPosition);
}