今天看到之前獲取驗證碼的倒計時代碼,感覺好繁瑣啊,於是就在使用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 + ")");
}
}