当前位置: 移动技术网 > 移动技术>移动开发>Android > Android与Kotlin发送验证码倒计时?

Android与Kotlin发送验证码倒计时?

2020年09月01日  | 移动技术网移动技术  | 我要评论
一、Android1.自定义倒计时方法/** * 获取验证码 */public void getYanZhengMa(TextView btn_yanzhengma, EditText edit_Phone) { userPhone = edit_Phone.getText().toString().trim(); if (!TextUtils.isEmpty(userPhone) && userPhone.length() == 11) {

一、Android

1.自定义倒计时方法

/**
 * 获取验证码
 */
public void getYanZhengMa(TextView btn_yanzhengma, EditText edit_Phone) {
    userPhone = edit_Phone.getText().toString().trim();
    if (!TextUtils.isEmpty(userPhone) && userPhone.length() == 11) {
        /** 倒计时60秒,一次1秒 */
        CountDownTimer timer = new CountDownTimer(60 * 1000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                // TODO Auto-generated method stub
                btn_yanzhengma.setTextColor(getResources().getColor(R.color.gray_light));
                btn_yanzhengma.setText("还剩" + millisUntilFinished / 1000 + "秒");
                btn_yanzhengma.setEnabled(false);
            }

            @Override
            public void onFinish() {
                btn_yanzhengma.setText("请重新获取");
                btn_yanzhengma.setTextColor(getResources().getColor(R.color.yanzhengma_color));
                btn_yanzhengma.setEnabled(true);
            }
        }.start();
        /**
         * 调用获取验证码接口
         * 测试手机号:18089212658
         * */
       // getYZMRequest(userPhone);
    } else {
        showToast("请输入正确手机号");
    }
}

说明:TextView btn_yanzhengma : 发送验证码的的按钮

          EditText edit_Phone  : 输入手机号的EditText

二、Kotlin

1.创建倒计时类

package com.june.lib.utils

import android.os.Handler
import android.widget.TextView

/**
 *@author:FengJun.wu
 *@date:2020-03-20 23:23
 *@discription:
**/

class TimerUnit(private val textView: TextView) : Handler() {
    private var defaultTime = 60
    private var time = defaultTime
    private var isShowEndText = true

    private var timeEndListener: OnTimeEndListener? = null

    private var runnable: Runnable = object : Runnable {
        override fun run() {
            time--
            if (time == 0) {
                endtTime()
                return
            }
            textView.text = String.format("%ds", time)
            postDelayed(this, 1000)
        }
    }

    fun setTimeEndListener(timeEndListener: OnTimeEndListener) {
        this.timeEndListener = timeEndListener
    }

    fun setShowEndText(showEndText: Boolean) {
        isShowEndText = showEndText
    }


    fun setTime(time: Int) {
        this.defaultTime = time
        this.time = defaultTime
    }

    fun startTime() {
        post(runnable)
        textView.isEnabled = false
    }


    fun pauseTime() {
        removeCallbacks(runnable)
        time = defaultTime
    }

    fun endtTime() {
        if (isShowEndText) {
            textView.text = "重新获取"
        }
        textView.isEnabled = true
        removeCallbacks(runnable)
        time = defaultTime
        if (timeEndListener != null) {
            timeEndListener!!.timeEnd()
        }
    }

    interface OnTimeEndListener {
        fun timeEnd()
    }

}

2. 在Activity中调用

private var timer: TimerUnit? = null
 /**
    * 获取验证码 按钮的点击事件
  * */
        loginSendSmsCode.setOnClickListener {
            if (timer == null) {
                timer = TimerUnit(loginSendSmsCode)
            }
            timer?.startTime()
        }

总结:都能实现自定义倒计时的时间,并且倒计时开始后,不到结束时间按钮是不能点击的。

 

 

本文地址:https://blog.csdn.net/yyxhzdm/article/details/108589734

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网