自定义类:
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使用:
<!--获取验证码-->
<com.xxx.app.utils.CountDownView
android:id="@+id/btn_get_sms_code"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:background="@drawable/shape_code"
android:gravity="center"
android:minWidth="70dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="获取验证码"
android:textColor="@color/colorPrimary"
android:textSize="12sp" />
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();
}