以下是我的音频播放器的搜索栏代码。目前,我能够将它移动,但是一旦我抬起手指,它就会再次回到原始的歌曲持续时间。如何通过搜索栏导航到歌曲的任何时间?
//initialize seekbar
seekbar = (SeekBar)findViewById(R.id.seekBar1);
seekbar.setClickable(false); //this should be set to true, correct?
以下是涉及搜索栏的地方,点击播放按钮
public void play(View view){
mediaPlayer.start();
finalTime = mediaPlayer.getDuration();
startTime = mediaPlayer.getCurrentPosition();
if(oneTimeOnly == 0){
seekbar.setMax((int) finalTime);
oneTimeOnly = 1;
}
seekbar.setProgress((int)startTime);
}
它也涉及UpdateSongTime方法
private Runnable UpdateSongTime = new Runnable() {
public void run() {
startTime = mediaPlayer.getCurrentPosition();
startTimeField.setText(String.format("%d:%02d",
TimeUnit.MILLISECONDS.toMinutes((long) startTime),
TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
toMinutes((long) startTime)))
);
seekbar.setProgress((int)startTime);
myHandler.postDelayed(this, 100);
}
};
答案 0 :(得分:0)
您需要实施OnSeekBarChangeListener。当您使用SeekBar执行某些操作时,将调用这些接口的方法。例如,您说要根据最终用户抬起手指的位置将曲目播放移动到特定时间。将onStartTrackingTouch (SeekBar seekBar)
覆盖为(如果您愿意)暂停音乐,并覆盖onStopTrackingTouch (SeekBar seekBar)
以便在您需要时再次开始播放音乐。
注意:搜索栏作为参数传递,以便您检查用户何时举起手指。
答案 1 :(得分:0)
实施SeekBar.OnSeekBarChangeListener。此界面包含三个可用于管理音频播放器的回调:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// MediaPlayer.seekTo(progress)
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// MediaPlayer.pause()
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// MediaPlayer.seekTo(seekBar.getProgress())
}
此外,您可能希望让UpdateSongRunnable在onStartTrackingTouch()
和onStopTrackingTouch()
之间暂停更新,否则当您将手指放在搜索栏上时,它会继续尝试更新。