Kotlin 倒计时
时间: 2024-01-25 22:13:20 浏览: 138
以下是两种基于Kotlin Flow实现倒计时功能的例子:
1. 在Activity中实现倒计时功能:
```kotlin
mBtnStart.setOnClickListener {
mCountDownView.startCountDown(10) {
showToast("倒计时结束")
}
}
```
2. 使用Flow实现倒计时功能:
```kotlin
private fun countDownByFlow(
max: Int,
scope: CoroutineScope,
onTick: (Int) -> Unit,
onFinish: (() -> Unit)? = null,
): Job {
return flow {
for (num in max downTo 0) {
emit(num)
if (num != 0) delay(1000)
}
}.flowOn(Dispatchers.Main)
.onEach { onTick.invoke(it) }
.onCompletion { cause ->
if (cause == null) onFinish?.invoke()
}
.launchIn(scope)
}
```
相关问题
使用kotlin实现倒计时功能
在Kotlin中实现倒计时功能的方法如下:
1. 创建一个计时器类,该类包含一个计时器和一个计时器任务:
```
class CountDownTimer(val totalTime: Long, val interval: Long, val onFinish: () -> Unit, val onTick: (Long) -> Unit) {
private var remainingTime = totalTime
private var timer: Timer? = null
fun start() {
timer = Timer()
timer?.scheduleAtFixedRate(object : TimerTask() {
override fun run() {
remainingTime -= interval
if (remainingTime <= 0) {
onFinish()
stop()
} else {
onTick(remainingTime)
}
}
}, 0, interval)
}
fun stop() {
timer?.cancel()
}
}
```
2. 在Activity或Fragment中实例化CountDownTimer类,设置总时间、间隔时间、倒计时结束回调和每秒钟回调:
```
val countDownTimer = CountDownTimer(
totalTime = 60000, // 总时间60秒
interval = 1000, // 每秒钟回调一次
onFinish = {
// 倒计时结束回调
// do something...
},
onTick = { remainingTime ->
// 每秒钟回调
// 更新UI
textView.text = "${remainingTime / 1000}秒"
}
)
```
3. 调用CountDownTimer的start方法开始倒计时:
```
countDownTimer.start()
```
4. 如果需要在用户退出Activity或Fragment时停止计时器,可以在onDestroy方法中调用CountDownTimer的stop方法:
```
override fun onDestroy() {
super.onDestroy()
countDownTimer.stop()
}
```
android textView显示倒计时 kotlin 代码实现
在Android上使用Kotlin编写TextView展示倒计时的代码通常是这样的:
```kotlin
import android.os.CountDownTimer
import android.widget.TextView
class MainActivity : AppCompatActivity() {
private lateinit var textView: TextView
private val countdownTime = 60 // 倒计时秒数
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView = findViewById(R.id.textView) // 获取布局文件中的TextView组件
val timer = object : CountDownTimer(countdownTime * 1000, 1000) { // 1000毫秒等于1秒
override fun onTick(millisUntilFinished: Long) {
val secondsRemaining = millisUntilFinished / 1000
textView.text = "剩余时间:" + secondsRemaining.toString()
}
override fun onFinish() {
textView.text = "计时结束"
}
}
timer.start()
}
}
```
这段代码首先在`onCreate`函数中获取到TextView组件,然后创建了一个CountDownTimer实例。`countdownTime`变量表示倒计时的总秒数。`onTick`方法会在每经过一秒钟更新TextView的内容,显示当前剩余的时间;当倒计时结束后,`onFinish`方法会被调用,显示"计时结束"。
阅读全文