videoview拖动thumb回退
时间: 2023-07-25 08:39:21 浏览: 95
如果你想要实现在 VideoView 上通过拖动 thumb 来回退进度条,可以在进度条的拖动事件中监听 thumb 的位置变化,并根据 thumb 的位置来设置 VideoView 的当前播放位置。以下是示例代码:
```
SeekBar seekBar = findViewById(R.id.seekBar);
VideoView videoView = findViewById(R.id.videoView);
videoView.setVideoPath("your_video_path");
// 监听进度条的拖动事件
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// do nothing
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// do nothing
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int thumbPos = seekBar.getThumb().getBounds().centerX(); // 获取 thumb 的中心位置
int barWidth = seekBar.getWidth(); // 获取进度条的宽度
int max = seekBar.getMax(); // 获取进度条的最大值
int progress = (int) ((float) thumbPos / barWidth * max); // 根据 thumb 的位置计算出当前进度
videoView.seekTo(progress); // 设置 VideoView 的播放位置
}
});
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start(); // 开始播放视频
seekBar.setMax(videoView.getDuration()); // 设置进度条的最大值为视频的总时长
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
int currentPosition = videoView.getCurrentPosition(); // 获取当前播放进度
seekBar.setProgress(currentPosition); // 设置进度条的当前进度
new Handler().postDelayed(this, 1000); // 每隔一秒更新进度条
}
}, 1000);
}
});
```
在上面的示例代码中,我们在进度条的拖动事件中计算出了 thumb 的位置并根据位置设置了 VideoView 的当前播放位置。其他部分与之前的示例代码相同。
阅读全文