Android 使用 Kotlin 和 RxJava 2.× 实现短信验证码倒计时效果

偷懒写作,只贴代码!

val timer:TextView = findViewById(R.id.textView) //这里的 timer 就是你要控制显示倒计时效果的 TextView 
val mSubscription: Subscription? = null // Subscription 对象,用于取消订阅关系,防止内存泄露
//开始倒计时,用 RxJava2 实现
    private fun timer() {
        val count = 59L
        Flowable.interval(0, 1, TimeUnit.SECONDS)//设置0延迟,每隔一秒发送一条数据
                .onBackpressureBuffer()//加上背压策略
                .take(count) //设置循环次数
                .map{ aLong ->
                    count - aLong //
                }
                .observeOn(AndroidSchedulers.mainThread())//操作UI主要在UI线程
                .subscribe(object : Subscriber<Long> {
                    override fun onSubscribe(s: Subscription?) {
                        timer.isEnabled = false//在发送数据的时候设置为不能点击
                        timer.textColor = resources.getColor(Color.GRAY)//背景色设为灰色
                        mSubscription = s
                        s?.request(Long.MAX_VALUE)//设置请求事件的数量,重要,必须调用
                    }

                    override fun onNext(aLong: Long?) {
                        timer.text = "${aLong}s后重发" //接受到一条就是会操作一次UI
                    }

                    override fun onComplete() {
                        timer.text = "点击重发"
                        timer.isEnabled = true
                        timer.textColor = Color.WHITE
                        mSubscription?.cancel()//取消订阅,防止内存泄漏
                    }

                    override fun onError(t: Throwable?) {
                        t?.printStackTrace()
                    }
                })
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容