2015-03-02 67 views
0

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

//initialize seekbar 
seekbar = (SeekBar)findViewById(R.id.seekBar1); 
seekbar.setClickable(false); //this should be set to true, correct? 

下面就是搜索条参与,在播放按钮的onclick

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

实现SeekBar.OnSeekBarChangeListener。此接口包含你可以用来管理你的音频玩家将3个回调:

@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()之间及其更新,否则将继续尝试更新,而你有你的手指在seekbar上。

+0

我需要设置这个'seekbar.setClickable(false);'为真?在xml中,我只指定了seekbar的id,没有onclick。我需要一个onclick? – 2015-03-02 17:25:18

+0

不需要onClick,你不需要将seekbar.clickable设置为true或false,默认设置工作正常。 – 2015-03-02 18:08:40

0

您需要实现OnSeekBarChangeListener。当您使用SeekBar执行某些操作时,将调用这些接口的方法。例如,您说根据最终用户抬起手指的位置,您想要将曲目播放移至特定时间。覆盖onStartTrackingTouch (SeekBar seekBar)(如果您愿意)可以暂停音乐和onStopTrackingTouch (SeekBar seekBar)以在您所需的时间重新开始播放音乐。

注意:搜索栏作为参数传递,以便检查用户什么时候抬起手指。