首先获取视频播放长度来设置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(); } } } }
转载于:https://www.cnblogs.com/lslzmx/archive/2012/01/09/2316820.html
相关资源:简单实现音乐播放器进度条功能