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