带有 ProgressBar 的 CountDownTimer,在重新启动应用程序时继续显示进度条
CountDownTimer with ProgressBar, continuing progressbar when restarting the app
我有一个 ProgressBar,它显示 CountdownTimer 的进度。 ProgressBar 工作,除了当我关闭应用程序并重新启动它时。如果我这样做,ProgressBar 从零开始。它不会从我离开的地方继续。
我有一个变量来维持以毫秒为单位的倒计时。我设法通过在 OnStop 和 OnStart 方法中使用 SharedPreferences 来正确维护它。但是如何正确使用这个变量来保持 ProgressBar 的进度呢?
private fun startCountdown() {
var i = 1
object : CountDownTimer(timeLeftInMilliseconds, 1000) {
override fun onTick(millisUntilFinished: Long) {
timeLeftInMilliseconds = millisUntilFinished
i++
myProgressBar.progress = (i * 100 / (40000 / 1000)).toInt()
//Instead of 40000 here, I have tried to use the variable
//timeLeftInMilliSeconds or millisUntilFinished, but that doesn't work.
}
override fun onFinish() {
progressBarOutOfLikesTimer.progress = 100;
timeLeftInMilliseconds = 40000
}
}
我认为这个 i
变量增加了不必要的复杂性。您可以根据剩余时间除以总时间直接计算要填充的柱的分数。我在这里使用 toDouble()
以确保我们没有进行整数数学运算并得到不需要的截断。我假设 ProgressBar 的 max
是 100。您应该将时间分数乘以 max
是什么。
private fun startCountdown() {
object : CountDownTimer(timeLeftInMilliseconds, 1000) {
override fun onTick(millisUntilFinished: Long) {
timeLeftInMilliseconds = millisUntilFinished
myProgressBar.progress = (100 * (1.0 - millisUntilFinished.toDouble() / 40000)).toInt()
}
override fun onFinish() {
progressBarOutOfLikesTimer.progress = 100;
timeLeftInMilliseconds = 40000
}
}
我有一个 ProgressBar,它显示 CountdownTimer 的进度。 ProgressBar 工作,除了当我关闭应用程序并重新启动它时。如果我这样做,ProgressBar 从零开始。它不会从我离开的地方继续。
我有一个变量来维持以毫秒为单位的倒计时。我设法通过在 OnStop 和 OnStart 方法中使用 SharedPreferences 来正确维护它。但是如何正确使用这个变量来保持 ProgressBar 的进度呢?
private fun startCountdown() {
var i = 1
object : CountDownTimer(timeLeftInMilliseconds, 1000) {
override fun onTick(millisUntilFinished: Long) {
timeLeftInMilliseconds = millisUntilFinished
i++
myProgressBar.progress = (i * 100 / (40000 / 1000)).toInt()
//Instead of 40000 here, I have tried to use the variable
//timeLeftInMilliSeconds or millisUntilFinished, but that doesn't work.
}
override fun onFinish() {
progressBarOutOfLikesTimer.progress = 100;
timeLeftInMilliseconds = 40000
}
}
我认为这个 i
变量增加了不必要的复杂性。您可以根据剩余时间除以总时间直接计算要填充的柱的分数。我在这里使用 toDouble()
以确保我们没有进行整数数学运算并得到不需要的截断。我假设 ProgressBar 的 max
是 100。您应该将时间分数乘以 max
是什么。
private fun startCountdown() {
object : CountDownTimer(timeLeftInMilliseconds, 1000) {
override fun onTick(millisUntilFinished: Long) {
timeLeftInMilliseconds = millisUntilFinished
myProgressBar.progress = (100 * (1.0 - millisUntilFinished.toDouble() / 40000)).toInt()
}
override fun onFinish() {
progressBarOutOfLikesTimer.progress = 100;
timeLeftInMilliseconds = 40000
}
}