首先擷取視頻播放長度來設定SeekBar的Max,videobBar.setMax(mediaPlayer.getDuration()),然後通過線程即時擷取視頻已經播放的時間來更新SeekBar,videobBar.setProgress(mediaPlayer.getCurrentPosition())思路就是這樣,具體代碼如下:
videobBar=(SeekBar)findViewById(R.id.seekBarPlayProgress);
surfaceView = (SurfaceView) findViewById(R.id.player);
surfaceView.getHolder().addCallback(new PlayCallback());
surfaceView.getHolder()
.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.getHolder().setFixedSize(surfaceView.getWidth(), surfaceView.getHeight());
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDisplay(surfaceView.getHolder());
try{
mediaPlayer.setDataSource("/sdcard/movie/自娛自樂_1.mp4");
mediaPlayer.prepare();
mediaPlayer.start();
videobBar.setMax(mediaPlayer.getDuration());
VideoThreed videoThreed=new VideoThreed();
videoThreed.start();
}
catch(Exception e)
{
Toast.makeText(this, "播放錯誤!", Toast.LENGTH_LONG).show();
}
//更新UI
Handler myHandler = new Handler()
{
public void handleMessage(Message msg)
{
switch (msg.what)
{
case PROGRESS_CHANGED:
videobBar.setProgress(mediaPlayer.getCurrentPosition());
break;
}
}
};
//視頻進度條更新
class VideoThreed extends Thread
{
public void run()
{
while (!Thread.currentThread().isInterrupted())
{
if(mediaPlayer.getCurrentPosition()==mediaPlayer.getDuration())
{
return;
}
Message message = new Message();
message.what =PROGRESS_CHANGED;
VideoPlayer.this.myHandler.sendMessage(message);
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
Thread.currentThread().interrupt();
}
}
}
}