在日常开发登录功能的时候,肯定要实现一个验证码倒计时的功能。这篇博客分享一下我实现获取验证码倒计时的经验,可以直接复制到项目当中。
倒计时工具类
import android.annotation.SuppressLint
import android.os.CountDownTimer
import android.widget.TextView
/**
* 倒计时工具
* @param mTextView 控件
* @param millisInFuture 持续时间
* @param countDownInterval 间隔时间
*/
class CountDownTimerUtil
(private val mTextView: TextView, millisInFuture: Long, countDownInterval: Long) :
CountDownTimer(millisInFuture, countDownInterval) {
/**
* 每隔间隔时间,就会回调这
*
* @param millisUntilFinished 剩余时间
*/
@SuppressLint("SetTextI18n")
override fun onTick(millisUntilFinished: Long) {
mTextView.isClickable = false //设置不可点击
mTextView.text = (millisUntilFinished / 1000).toString() + "秒"
}
/**
* 结束的时候回调
*/
override fun onFinish() {
mTextView.text = "获取验证码"
//重新获得点击
mTextView.isClickable = true
}
}
使用方法
定义全局变量:
private var countDownTimerUtil: CountDownTimerUtil? = null
在界面的点击事件方法当中初始化并开始
view.setOnClickListener{
// 初始化倒计时,倒计时长60秒,步长是1秒
countDownTimerUtil = CountDownTimerUtil(binding.getCodeTv, 60000, 1000)
countDownTimerUtil?.start()
}
这样倒计时就很简单的实现了,如果是放到网络请求当中去,思路如下:
- 网络请求开始的时候,调用
countDownTimerUtil?.start()
方法让倒计时开始; - 网络请求发生异常时,调用
countDownTimerUtil?.onFinish()
方法让倒计时中断。
这样就可以简单实现我们想要的倒计时功能了,希望对Android开发的小伙伴有所帮助。