我有一个音频播放器应用程序,并且有一个链接到SeekBar的“播放/暂停”按钮。如果mediaPlayer
处于播放状态,则与条形图的每个用户交互都将得到很好的接收,该条形将非常敏感,并正确链接到音频剪辑的持续时间。现在这是问题所在...如果mediaPlayer
被暂停,则用户每次与竖条交互时都会将其进度重置为0%,同时仍要暂停(此时它应该停留在用户放置的位置)。恢复mediaPlayer
后,它将从用户暂停时指向的位置开始。因此,我显然缺少了一些东西,如果在mediaPlayer
暂停时轻按,则竖线拇指似乎处于0%。
seekBar创建:
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//Detecting seekBar's movement.
@Override
public void onProgressChanged(SeekBar bar, int progress, boolean fromUser) {
if (fromUser) {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.seekTo(progress); //Procedural link of mediaPlayer and seekBar.
} else {
seekBar.setProgress(0); //Dictates that seekBar is unusable whenever mediaPlayer is inoperable.
}
}
}
@Override
public void onStartTrackingTouch(SeekBar bar) {}
@Override
public void onStopTrackingTouch(SeekBar bar) {}
});
播放/暂停按钮:
private void usePlayBtn() {
//Called when playBtn is pressed.
if(mediaPlayer != null) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
playBtn.setImageResource(R.drawable.play);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
//Detects mediaPlayer's task completion.
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
completion();
}
});
} else {
mediaPlayer.start();
playBtn.setImageResource(R.drawable.pause);
changeSeekBar();
}
}
}
changeSeekBar方法:
private void changeSeekBar() {
//Changes seekBar's progress in correspondence to mediaPlayer's progress.
seekBar.setProgress(mediaPlayer.getCurrentPosition());
if (mediaPlayer.isPlaying()) {
runnable = new Runnable() {
@Override
public void run() {
changeSeekBar();
}
};
handler.postDelayed(runnable, 10); //Controls the flow of the SeekBar's movement (fewer ms means that the SeekBar's progress refreshes faster, motion appears smoother).
}
}