2015-02-18 172 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); 
} 
});