【问题标题】:How can I create a simple count down timer in HH:MM:SS and show them in a Lazy Column如何在 HH:MM:SS 中创建一个简单的倒数计时器并在惰性列中显示它们
【发布时间】:2022-11-10 14:30:42
【问题描述】:
我正在学习jetpack compose,但我似乎无法理解如何创建一个简单的countDownTimer。我想要做的是创建一个 countDownTimer ,它接受来自用户的三个输入(小时、分钟和秒),然后当我单击开始按钮时,我想在 LazyColomun 中显示计时器。您认为可能有助于我理解这对我来说是可以接受的任何链接。
【问题讨论】:
标签:
android
kotlin
android-jetpack-compose
android-jetpack
countdowntimer
【解决方案1】:
一般理解
计时器的最基本形式,以秒或毫秒为单位计数。即使您向用户询问小时、分钟和秒,您也应该将其全部转换为秒/毫秒并在此基础上启动计时器。
例如
全部转换为秒
- 小时 = 3(hr) = 10800 秒
- 分钟 = 15(min) = 15 * 60 = 900 秒
- 秒 = 20(秒) = 20 秒
所以你的计时器应该从 hr + min + sec = 11720 秒开始倒计时
您只需将秒/毫秒转换为您想要显示经过时间的格式(您的刷新率)
外部文章
下面的文章应该做你想做的。
Let’s Make a Countdown Timer app using Android Compose
【解决方案2】:
您可以使用这些代码来创建倒数计时器:
输入:日期
val time = (timerDate.time).minus(Calendar.getInstance().timeInMillis)
var timer by remember { mutableStateOf(time) }
LaunchedEffect(key1 = timer) {
if (timer > 0) {
delay(1000L)
timer -= 1000L
}
}
val secMilSec: Long = 1000
val minMilSec = 60 * secMilSec
val hourMilSec = 60 * minMilSec
val dayMilSec = 24 * hourMilSec
val hours = (time % dayMilSec / hourMilSec).toInt()
val minutes = (time % dayMilSec % hourMilSec / minMilSec).toInt()
val seconds = (time % dayMilSec % hourMilSec % minMilSec / secMilSec).toInt()
Text(text = String.format(" %02d:%02d:%02d", hours, minutes, seconds))