coroutine倒计时 kotlin_Kotlin实战-倒计时按钮(Rxjava实现)
效果圖:
錄屏.gif
主要知識點:Rxjava的interval操作符,AndroidSchedulers.mainThread()線程
Kotlin的主函數(shù)默認值
import android.content.Context
import android.support.v7.appcompat.R
import android.support.v7.widget.AppCompatButton
import android.util.AttributeSet
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import java.util.concurrent.TimeUnit
class CountdownButton(mContext: Context, mAttributes: AttributeSet? = null, mDefStyleAttr: Int = R.attr.buttonStyle) : AppCompatButton(mContext, mAttributes, mDefStyleAttr) {
constructor(context: Context, attributes: AttributeSet) : this(mContext = context, mAttributes = attributes)
constructor(context: Context) : this(mContext = context)
var count: Int = 59
lateinit var subscribe: Disposable//保存訂閱者
fun start() {
isClickable = false//禁用點擊,防止重復操作
text = "${count + 1}s"
subscribe = Observable.interval(1, TimeUnit.SECONDS)//按時間間隔發(fā)送整數(shù)的Observable
.observeOn(AndroidSchedulers.mainThread())//切換到主線程修改UI
.subscribe {
val show = count - it
if (show < 0.toLong()) {//當?shù)褂嫊r小于0,計時結(jié)束
stop()
return@subscribe//使用標記跳出方法
}
text = "${show}s"
}
}
/**
* 結(jié)束計時,重新開始
*/
fun stop() {
subscribe.dispose()//取消訂閱
text = "重新獲取"
isClickable = true//重新開啟點擊事件
return
}
}
總結(jié)
以上是生活随笔為你收集整理的coroutine倒计时 kotlin_Kotlin实战-倒计时按钮(Rxjava实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言浮点数高精度求平方根,快速高精度的
- 下一篇: 高手博客地址