1.监听进度变化
/**
* 播放进度显示
*/
private Boolean isShowDuration = true; //是否显示
private ExecutorService executorService; //线程池
long cur = 0; //进度值
long dur = 0; //总长度
int pro ; //转换后,显示在progressBar上的进度值
int bufferedPercent ; //转换后,显示在progressBar上的当前缓冲百分比
private void setPlayDurtionThread() {
if (executorService == null) {
executorService = Executors.newSingleThreadExecutor();
}
executorService.execute(new Runnable() {
@Override
public void run() {
//Logutil.i( "开始进度线程");
isShowDuration = true;
while (isShowDuration) {
try {
if (mVideoView != null && mVideoView.isPlaying()) {
cur = mVideoView.getCurrentPosition();
dur = mVideoView.getDuration();
if (cur < 0 || cur > dur) continue; //不正常数据
//计算进度值
pro = (dur == 0) ? 0 : (int) (cur * seekBarPlayer.getMax() / (float) dur + 0.5);
//获取当前缓冲百分比
bufferedPercent = (seekBarPlayer.getMax()*mVideoView.getBufferedPercentage()/100);
// Logutil.d("ShortVideoSlipLoopFragment setPlayDurtionThread", "percent="+mVideoView.getBufferedPercentage()+", bufferedPercent="+bufferedPercent);
((Activity)context).runOnUiThread(new Runnable() {
@Override
public void run() {
if (!isShowDuration) return;
seekBarPlayer.setProgress(pro);
// seekBarPlayer.setSecondaryProgress(bufferedPercent);
}
});
}
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//Logutil.i("结束进度线程");
}
});
}
2.拖动后响应进度变化
SeekBar seekBarPlayer = view.findViewById(R.id.seekBar); //播放进度条
seekBarPlayer.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//当进度条停止修改时触发
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//取得当前进度条的刻度
int progress = seekBar.getProgress();
//对应的响应操作
//......
}
});
原文章的地址找不到了,如果原作者有需要,可提供地址让我标明原文地址!!!