我打算为我的应用编写一个自定义媒体控制器。我计划使用SeekBar来实现拖动和显示进度。正在尝试实现此功能。
请问是否有类似的实现,或者我走错了方向?
我打算为我的应用编写一个自定义媒体控制器。我计划使用SeekBar来实现拖动和显示进度。正在尝试实现此功能。
请问是否有类似的实现,或者我走错了方向?
终于想通了!!
我想出的解决方案是这样的:
首先将seekbar的最大进度设置为视频的持续时间
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
seekBar.setMax(videoView.getDuration());
seekBar.postDelayed(onEverySecond, 1000);
}
});
这段可运行代码将不断更新进度条:
private Runnable onEverySecond=new Runnable() {
@Override
public void run() {
if(seekBar != null) {
seekBar.setProgress(videoView.getCurrentPosition());
}
if(videoView.isPlaying()) {
seekBar.postDelayed(onEverySecond, 1000);
}
}
};
然后可以使用SeekBar的setOnSeekBarChangeListener来获取用户在媒体上的拖动。通过使用fromUser布尔值,我们可以确定它是由于用户交互引起的回调还是由程序自身引起的。
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if(fromUser) {
// this is when actually seekbar has been seeked to a new position
videoView.seekTo(progress);
}
}
});
你设置了次要进度。
不,你走在正确的轨道上。它非常适合显示下载进度和流媒体的当前位置等内容。
videoView.start()
播放时,进度条不起作用了,如何解决这个问题? - java acm