2011-08-29 37 views
0

我有一個媒體播放器的搜索欄,我已經實現如下。Android:進度更新SeekrBar

//SeekBar setup  
    progress = (SeekBar)findViewById(R.id.seekBarPlayer); 
    progress.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 
      if (fromUser) { 
       mediaPlayer.seekTo(progress); 
       Log.v(TAG,progress +"Seeking..."); 
      } 

     } 
    }); 

    //seekbar initiated after mediaplayer initiated 
    total = mediaPlayer.getDuration(); 
    progress.setMax(total); 

但我的問題是seekBar不能像音樂播放那樣運行。它在一個地方閒置,如果我尋求音樂的追求,但它不會隨着音樂運行或進步。有人能告訴我我錯過了什麼嗎?

提前感謝您的時間。

+1

檢查這個帖子:http://stackoverflow.com/questions/2967337/android-how-do-i-use-the-progress-bar –

+1

你在哪裏更新它?我看到了seekTo的代碼,用於獲取最大持續時間...以及如何從第二個線程手動更新您的seekbar進度?請展示給我們讓我們作出一些結論。檢查了這一點:http://stackoverflow.com/questions/2967337/android-how-do-i-use-the-progress-bar – Lonkly

回答

3

線程太重了。這裏是我使用的減少版本。

聲明處理您的活動

private boolean isPaused; 
Handler handler = new Handler(); 

在聲明可運行

Runnable onEverySecond = new Runnable() { 

    @Override 
    public void run() { 
     if(!isPaused){ 
      progress.setProgress(player.getCurrentPosition());    

      handler.postDelayed(onEverySecond, EVERY_SECOND); 
     } 
    } 
}; 

在你的簡歷上

@Override 
protected void onResume() { 
    isPaused = false; 
    handler.postDelayed(onEverySecond, EVERY_SECOND); 
} 

上暫停

@Override 
protected void onPause() { 
    isPaused = true; 
    handler.removeCallbacks(onEverySecond); 
}