获取在videoview下播放的video的进度时间?
我需要获取在“VideoView”中播放的video的进度时间(即进度条左侧显示的时间)。
任何帮助将真正被赞赏。 谢谢。
你可以通过mVideoView.getDuration()
得到video的持续时间,最初设置进度条为0,然后通过mVideoView.getCurrentPosition();
获取video的mVideoView.getCurrentPosition();
并根据当前video百分比(%)乘以(current * 100 / duration)
增加进度条状态。 我尝试了使用AsyncTask
结帐这个完整的例子。
main.xml中
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <VideoView android:id="@+id/my_Video_View" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <ProgressBar android:layout_alignParentBottom="true" style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="fill_parent" android:layout_height="10dp" android:id="@+id/Progressbar"/> </RelativeLayout>
VideoPlayActivity.java
public class VideoPlayActivity extends Activity { ProgressBar mProgressBar; VideoView mVideoView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String path = Environment.getExternalStorageDirectory().toString(); String filename = "/hr.3gp"; mProgressBar = (ProgressBar) findViewById(R.id.Progressbar); mProgressBar.setProgress(0); mProgressBar.setMax(100); mVideoView = (VideoView) findViewById(R.id.my_Video_View); mVideoView.setVideoURI(Uri.parse(path+filename)); new MyAsync().execute(); } private class MyAsync extends AsyncTask<Void, Integer, Void> { int duration = 0; int current = 0; @Override protected Void doInBackground(Void... params) { mVideoView.start(); mVideoView.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { duration = mVideoView.getDuration(); } }); do { current = mVideoView.getCurrentPosition(); System.out.println("duration - " + duration + " current- " + current); try { publishProgress((int) (current * 100 / duration)); if(mProgressBar.getProgress() >= 100){ break; } } catch (Exception e) { } } while (mProgressBar.getProgress() <= 100); return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); System.out.println(values[0]); mProgressBar.setProgress(values[0]); } } }
您可以使用getCurrentPosition()
和getDuration()
来计算进度。
你可以像下面这样使用Thread来实现这个目的:
videoView.start(); videoView.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { running = true; final int duration = videoView.getDuration(); new Thread(new Runnable() { public void run() { do{ textView.post(new Runnable() { public void run() { int time = (duration - videoView.getCurrentPosition())/1000; textView.setText(time+""); } }); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } if(!running) break; } while(videoView.getCurrentPosition()<duration); } }).start(); } });
我是这样完成的
private void playVideo() { setViewNotVisibility(); final String videoSource = "android.resource://" + getPackageName() + File.separator + R.raw.moviiegood; videoView.setKeepScreenOn(true); videoView.setVideoURI(Uri.parse(videoSource)); videoView.setMediaController(null); videoView.setOnCompletionListener(myVideoViewCompletionListener); videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { startVideo(); setDuration(); timerCounter(); } } ); } private Timer timer; private void timerCounter(){ timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { updateUI(); } }); } }; timer.schedule(task, 0, 1000); } private int duration = 0; private void setDuration(){ duration = videoView.getDuration(); } private void updateUI(){ if (pbVideoView.getProgress() >= 100) { timer.cancel(); } int current = videoView.getCurrentPosition(); int progress = current * 100 / duration; pbVideoView.setProgress(progress); }
如果你有问题,随时问