自定义类:
import android.content.Context;
import android.os.CountDownTimer;
import android.util.AttributeSet;
import androidx.appcompat.widget.AppCompatTextView;
import java.util.Locale;
public class CountDownView extends AppCompatTextView {
public CountDownView(Context context) {
super(context);
}
public CountDownView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CountDownView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private static final int COUNT_DOWN_SEConDS = 60;
private static final int COUNT_DOWN_INTERVAL_SEConDS = 1;
private CountDownTimer mCountDownTimer = new CountDownTimer(COUNT_DOWN_SEConDS * 1000L,
COUNT_DOWN_INTERVAL_SEConDS * 1000L) {
@Override
public void onTick(long millisUntilFinished) {
setText(String.format(Locale.getDefault(), "%ds", millisUntilFinished / 1000));
}
@Override
public void onFinish() {
setText("重新获取");
setEnabled(true);
}
};
public void start() {
mCountDownTimer.start();
setEnabled(false);
}
public void cancel() {
mCountDownTimer.cancel();
}
}
xml使用:
activity:
@BindView(R.id.btn_get_sms_code)
CountDownView btn_get_sms_code;
// 发送验证码
@OnClick(R.id.btn_get_sms_code)
void getSmsCodeClick(CountDownView view) {
if (view.isEnabled()) {
// TOTO 请求发送验证码的接口,成功后调用 .start();
btn_get_sms_code.start();
}
}
// 页面关闭时 销毁
@Override
protected void onDestroy() {
btn_get_sms_code.cancel();
super.onDestroy();
}



