今天看到之前获取验证码的倒计时代码,感觉好繁琐啊,于是就在使用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 + ")"); } }