获取验证码倒计时类简单封装

时间:2022-06-20 21:59:54

   今天看到之前获取验证码的倒计时代码,感觉好繁琐啊,于是就在使用Chronometer控件的条件下,自己封装了一个类。

使用的时候直接初始化一个Chronometer 控件,添加点击事件(在点击事件中调用TimerClass内的initTimer方法,传入倒计时时间),新建一个TimerClass就行,

实现效果就是:

获取验证码-------->重新发送(5s)----------->重新发送

import android.content.Context;
import android.util.Log;
import android.view.View;
import android.widget.Chronometer;

/**
 * @类名称: CLASS
 * @类描述:
 * @创建人:LiuLL
 * @创建时间:2017/7/31 15:42
 * @备注:
 */
public class TimerClass {
    private static final String TAG = "TimerClass";
    private Chronometer mChronometer;
    private View.OnClickListener mListener;

    public TimerClass(View.OnClickListener listener, Chronometer chronometer) {
        this.mChronometer = chronometer;
        this.mListener = listener;
        init();
    }

    /**
     * 初始化控件
     */
    private void init() {
        mChronometer.setText("获取验证码");
        mChronometer.setOnClickListener(mListener);
    }


    /**
     * 开始倒计时
     *
     * @param total
     */
    public void initTimer(long total) {
        mChronometer.setOnClickListener(null);
        final long[] timeLeftInS = {total};
        mChronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
            @Override
            public void onChronometerTick(Chronometer chronometer) {
                if (timeLeftInS[0] <= 0) {
                    Log.e(TAG, "onChronometerTick: stop" + System.currentTimeMillis());
                    mChronometer.stop();
                    mChronometer.setText("重新发送");
                    mChronometer.setOnClickListener(mListener);
                    return;
                }
                timeLeftInS[0]--;
                refreshTimeLeft(timeLeftInS[0]);
            }
        });
        Log.e(TAG, "onChronometerTick: start" + System.currentTimeMillis());
        mChronometer.start();
    }

    /**
     * 刷新倒计时数据
     *
     * @param timeLeftInS
     */
    private void refreshTimeLeft(long timeLeftInS) {
        this.mChronometer.setText("重新发送:(" + timeLeftInS + ")");
    }
}