使音频播放器搜索栏可点击

时间:2015-03-02 16:07:39

标签: android audio

以下是我的音频播放器的搜索栏代码。目前,我能够将它移动,但是一旦我抬起手指,它就会再次回到原始的歌曲持续时间。如何通过搜索栏导航到歌曲的任何时间?

//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);
    }
};

2 个答案:

答案 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()之间暂停更新,否则当您将手指放在搜索栏上时,它会继续尝试更新。