目录
目录效果展示
实现步骤
1. 导入RxBinding依赖
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
2. 逻辑代码编写
- 布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.itfitness.countdown.MainActivity">
<Button
android:id="@+id/bt_ver"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="获取验证码"
/>
</LinearLayout>
- Activity代码(这里为了简便使用了Kotlin)
class MainActivity : AppCompatActivity() {
private val MAX_TIME:Long = 60
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
RxView.clicks(bt_ver)//给按钮绑定点击事件
.throttleFirst(MAX_TIME,TimeUnit.SECONDS)//防止1秒内多次点击
.flatMap({
RxView.enabled(bt_ver).accept(false)//设置按钮不可用
RxTextView.text(bt_ver).accept("剩余${MAX_TIME}秒")//设置显示文字
//这里做发送获取短信验证码的操作
//==============================
return@flatMap Observable.interval(1, TimeUnit.SECONDS, Schedulers.io()).take(MAX_TIME)//每秒发送一次每次数都+1,总共发送60次
})
.map { aLong -> MAX_TIME - aLong - 1 }
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if(it.toInt() == 0){//如果计时结束了就恢复能点击状态
RxView.enabled(bt_ver).accept(true)//设置按钮可用
RxTextView.text(bt_ver).accept("获取验证码")
}else{
RxTextView.text(bt_ver).accept("剩余${it}秒")
}
})
}
}
网友评论