CountdownTimer完成时如何通知Observable
我有一个自定义的Android TextView,通过CountDownTimer显示游戏中剩余的时间
class CountdownTextView(context: Context, attrs: AttributeSet) : TextView(context, attrs) { private lateinit var countDownTimer: CountDownTimer private lateinit var onFinishObservable: Observable<Unit> fun setTime(initTime: Int) { this.text = "$initTime:00" countDownTimer = object : CountDownTimer((initTime *1000).toLong(), 1000) { override fun onTick(millisUntilFinished: Long) { val minutes = millisUntilFinished / 60000 val seconds = (millisUntilFinished % 60000) / 1000 if (seconds / 10 > 0) { text = "$minutes:${(millisUntilFinished % 60000) / 1000}" } else { text = "$minutes:0${(millisUntilFinished % 60000) / 1000}" } } override fun onFinish() { } } fun startCountdown() { countDownTimer.start() } }
如何在调用countDownTimer的onFinish()方法时设置一个发出值的observable? 我需要这样做,以便在主要的活动中,我可以订阅这个可观察的,并在倒数计时器到期时执行必要的操作。
- 面对与kotlin匕首的问题2
- Kotlin的Android扩展和变量
- kotlin android – Xposed IllegalArgumentException'android.content.res.CoollifeUITpedArray'
- 如何避免Kotlin中的lateinit字段的部分覆盖
- 像动画一样缓慢地在画布上画一条线
你可以提供一个主题 。
val onFinishObservable = CompletableSubject.create() override fun onFinish() { onFinishObservable.onComplete() }
或者你可以使用Rx来代替CountDownTimer
。
fun countDownTimer( time: Long, timeUnit: TimeUnit = TimeUnit.MILLISECONDS, tick: Long = 1, tickUnit: TimeUnit = TimeUnit.MILLISECONDS ): Observable<Long> { val timeNanos = timeUnit.toNanos(time).also { require(it >= 0) } val tickNanos = tickUnit.toNanos(tick).also { require(it > 0) } val ticks = timeNanos / tickNanos return Observable .intervalRange( 1L, ticks, timeNanos % tickNanos, tickNanos, TimeUnit.NANOSECONDS) .map { ticks - it } .startWith(ticks) } fun start(time: Long, timeUnit: TimeUnit = TimeUnit.SECONDS): Completable { timerSubscription?.dispose() val timer = countDownTimer(time, timeUnit, tickUnit = TimeUnit.SECONDS) timerSubscription = timer.subscribe { text = String.format("%d:%02d", it / 60, it % 60) } return timer.ignoreElements() }
无论哪种方式,来电者可以订阅该Completable
。
- TransformException重复org / intellij / lang / annotations / Identifier.class的条目
- 用Kotlin记录
- Kotlin减少功能为2d列表不起作用
- Android Studio 3.0和gradle升级 – 创建apk时缺少base.apk代码
- Firebase在Android上与Kotlin无法解析的超类型
- 使用kotlin的房间数据库
- 为什么Kotlin插件为Android项目添加了kotlin-stdlib-jre7(不是kotlin-stdlib)参考
- Kotlin anko通用选择器在提供的示例中不起作用
- Anko插件无法在Androidstudio版本> 2.1中运行