如何添加一个短暂的延迟,以便用户可以看到滚动的每个数字。科特林,Android 工作室
How do I add a short delay, so user can see every number that was rolled. Kotlin, Android Studio
假设我正在制作一个简单的 dnd 骰子滚筒(因为我是),我做到了,所以它会根据他们想要掷出的骰子数量和骰子类型来掷出一堆随机数。然后它一次将它发送到一个文本视图(我想要的);但是,它只显示一个数字,因为它没有延迟让用户看到滚动的每个数字(它只显示最后一个数字)。
我该怎么做?
else if (numTimesRolled.progress <= 4) {
for (i in 0 until numTimesRolled.progress){
randNum = Random.nextInt(1, diceIsComfirm)
resultsArray[i] = randNum.toString()
}
for (i in 0 until numTimesRolled.progress){
randNumDisplay.text = resultsArray[i]
}
非协程解决方案是post Runnables:
val delayPerNumber = 500L // 500ms
for (i in 0 until numTimesRolled.progress){
randNumDisplay.postDelayed({ randNumDisplay.text = resultsArray[i] }, i * delayPerNumber)
}
使用协程:
lifecycleScope.launch {
for (i in 0 until numTimesRolled.progress){
delay(500) // 500ms
randNumDisplay.text = resultsArray[i]
}
}
协程的一个优点是如果 Activity 或 Fragment 被破坏,它会自动停止,所以如果 Activity/Fragment 在协程仍然 运行 时关闭,它不会'不要把你过时的观点留在记忆中。
假设我正在制作一个简单的 dnd 骰子滚筒(因为我是),我做到了,所以它会根据他们想要掷出的骰子数量和骰子类型来掷出一堆随机数。然后它一次将它发送到一个文本视图(我想要的);但是,它只显示一个数字,因为它没有延迟让用户看到滚动的每个数字(它只显示最后一个数字)。
我该怎么做?
else if (numTimesRolled.progress <= 4) {
for (i in 0 until numTimesRolled.progress){
randNum = Random.nextInt(1, diceIsComfirm)
resultsArray[i] = randNum.toString()
}
for (i in 0 until numTimesRolled.progress){
randNumDisplay.text = resultsArray[i]
}
非协程解决方案是post Runnables:
val delayPerNumber = 500L // 500ms
for (i in 0 until numTimesRolled.progress){
randNumDisplay.postDelayed({ randNumDisplay.text = resultsArray[i] }, i * delayPerNumber)
}
使用协程:
lifecycleScope.launch {
for (i in 0 until numTimesRolled.progress){
delay(500) // 500ms
randNumDisplay.text = resultsArray[i]
}
}
协程的一个优点是如果 Activity 或 Fragment 被破坏,它会自动停止,所以如果 Activity/Fragment 在协程仍然 运行 时关闭,它不会'不要把你过时的观点留在记忆中。