【发布时间】:2017-07-10 09:52:41
【问题描述】:
我有一个 seekBar 以及一个当前计时器和总时间 textViews,用于一个简单的音乐播放应用程序。似乎当我暂停音乐时,getDuration 和 getCurrentPosition 都返回 0,这就是为什么当前时间和总时间文本都变为 0 并且 seekBar 也重置到开头的原因。当我恢复时,一切都回到原来的位置,好像没有问题一样。为什么 getDuration 和 getCurrentPosition 在暂停时返回 0?有解决方法吗?
我试图通过将可见性设置为消失并创建一组新的两个 textView 和 seekBar 来解决问题我仍然会在一瞬间看到重置项目。我在一个按钮中处理播放和暂停。如果需要任何其他信息,请告诉我。下面是我的 seekBar 处理方法,这两个方法都是在 onCreate 中调用的:
/**
* SeekBar setup and handling
* TODO: Bug where seekBar sets to 0 when paused. Retains position when resumed.
*/
private void initializeSeekBar() {
seekBar = (SeekBar) findViewById(R.id.seekBar);
totalDuration = new TextView(this);
totalDuration = (TextView) findViewById(R.id.totalDuration);
currentDuration = new TextView(this);
currentDuration = (TextView) findViewById(R.id.currentDuration);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(final SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser && musicBound) {
// update current time on change
currentDuration.setText(convertedTime(progress * 1000));
// update seekBar
seekTo(progress * 1000);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
musicService.mutePlayer();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
musicService.unMutePlayer();
seekTo(getCurrentPosition());
}
});
// start seekBar updating thread
run();
}
/**
* Thread that updates seekBar as song plays
*/
@Override
public void run() {
updateMetadataDisplay();
if (musicBound) {
long totalTime = getDuration();
long currentTime = getCurrentPosition();
seekBar.setMax(getDuration() / 1000);
seekBar.setProgress(getCurrentPosition() / 1000);
// timers
totalDuration.setText(convertedTime(totalTime));
currentDuration.setText(convertedTime(currentTime));
}
handler.postDelayed(this, 1000);
}
【问题讨论】:
标签: java android timer seekbar