2015-02-18 102 views
1

我試圖在Android應用程序中創建視頻播放器,並且我想在播放視頻時更新SeekBar。這裏是我的代碼,其中兩個第一行是在OnCreate方法:SeekBar更新不起作用

seekBar = (SeekBar) findViewById(R.id.seekBar); 
seekBar.setOnSeekBarChangeListener(change); 

private OnSeekBarChangeListener change = new OnSeekBarChangeListener() { 

@Override 
public void onStopTrackingTouch(SeekBar seekBar) { 
    int progress = seekBar.getProgress(); 
    if (vv_video != null && vv_video.isPlaying()) { 
     // Set the position of the currently playing 
     vv_video.seekTo(progress); 
    } 
} 

@Override 
public void onStartTrackingTouch(SeekBar seekBar) { 

} 

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, 
      boolean fromUser) { 

} 
}; 

而且在播放方法我試過如下:

protected void play(int msec) { 
..... 
    seekBar.setMax(vv_video.getDuration()); 
    // To update the progress bar thread, scale 
    new Thread() { 
     @Override 
     public void run() { 
      try { 
       isPlaying = true; 
       while (vv_video.isPlaying()) { 
        int current = vv_video.getCurrentPosition(); 
        seekBar.setProgress(current); 

        sleep(500); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }.start(); 
} 

這不工作;在播放視頻時,我的seekBar總是在位置= 0處。

回答

1

發生這種情況是因爲您嘗試從其他線程更新GUI線程。你需要做的是發佈一個可運行的GUI線程。

void play() { 

    new Thread() { 
     void run() { 

      // Do stuff 
      seekBar.post(new Runnable() { 

       void run() { 

        // Update UI thread 
        seekBar.setProgress(10); 
       } 
      }); 
     } 
    }.start(); 
} 

你也可以考慮使用一個處理程序來處理所有可能的消息。

See this Android documentation.

0

你必須更新UI線程本身搜索條,並且,這可以使用一個可運行來完成。試試這個:

private Handler mHandler = new Handler(); 
//Make sure you update Seekbar on UI thread 
MainActivity.this.runOnUiThread(new Runnable() { 

@Override 
public void run() { 
    if(mMediaPlayer != null){ 
     int mCurrentPosition = mMediaPlayer.getCurrentPosition()/1000; 
     mSeekBar.setProgress(mCurrentPosition); 
    } 
    mHandler.postDelayed(this, 1000); 
} 
});