当将SeekBar应用于MediaPlayer时,可能会遇到SeekBar不动的问题。这可能是由于SeekBar与MediaPlayer的更新频率不一致导致的。为了解决这个问题,你可以尝试以下方法:
SeekBar seekBar = findViewById(R.id.seekBar);
MediaPlayer mediaPlayer = new MediaPlayer();
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mediaPlayer.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
seekBar.setMax(mediaPlayer.getDuration());
mediaPlayer.start();
updateSeekBar();
}
});
private void updateSeekBar() {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
if (mediaPlayer.isPlaying()) {
Runnable runnable = new Runnable() {
@Override
public void run() {
updateSeekBar();
}
};
handler.postDelayed(runnable, 1000); // 1秒更新一次SeekBar
}
}
通过以上方法,你应该能够正确地将SeekBar应用于MediaPlayer,并使其能够正确地更新进度。确保在合适的地方调用MediaPlayer的prepare()
或prepareAsync()
方法以准备播放。