Android自定义获取验证码倒计时按钮

xiaoxiao2021-07-06  356

 

 

import android.content.Context; import android.os.CountDownTimer; import android.support.v7.widget.AppCompatButton; import android.util.AttributeSet; /** * Created by Administrator on 2017/5/25. * 倒时间button * * 倒计时提示: * setHintText() * 开始计时 * onStart() * 结束计时 * onCancel() *请务必在activity或fragment的onDestroy()方法里执行onCancel()方法 * 其他方法和button一样,包括设置背景色和文字颜色等 * * * 使用方法: * CountDownButton timerButton = findViewById(R.id.TimerButton); * timerButton.setHintText("%d秒后重新获取"); //不设置的话,默认为“xx秒后重新获取” * timerButton.setCountdownTime(60); //不设置默认为60秒 * timerButton.setText("获取验证码"); * timerButton.setOnClickListener(new View.OnClickListener() { * @Override * public void onClick(View v) { * //开始倒计时 * timerButton.onStart(); * } * }); * * 在activity或fragment的onDestroy()方法里执行onCancel()方法 * protected void onDestroy() { * super.onDestroy(); * timerButton.onCancel(); * } * */ public class CountDownButton extends AppCompatButton { private String text; private String hint = "%d秒后重新获取"; private int second = 60; private CountDownTimer timer; private String baseText = ""; public CountDownButton(Context context) { this(context,null); } public CountDownButton(Context context, AttributeSet attrs) { this(context, attrs, R.attr.buttonStyle); } public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); baseText = getText().toString(); } private void setHintCount(int i){ String text = String.format(hint,i); setText(text); } public void setHintText(String hint){ //hint格式为内容+%d,如:“%d秒后重新获取” this.hint = hint; } @Override public void setText(CharSequence text, BufferType type) { this.text = text.toString(); super.setText(text, type); } public void setCountdownTime(int second) { this.second = second; } public void onStart(){ baseText = getText().toString(); if(timer == null){ timer = getCountDownTimer(second); } timer.cancel(); timer.start(); } private CountDownTimer getCountDownTimer(int time){ return new CountDownTimer(time*1000,1000) { @Override public void onTick(long millisUntilFinished) { if(isClickable()) setClickable(false); setHintCount((int)millisUntilFinished/1000); } @Override public void onFinish() { setClickable(true); setText(baseText); } }; } public void onCancel(){ if(timer != null){ timer.cancel(); } } }

 

转载请注明原文地址: https://www.6miu.com/read-4821473.html

最新回复(0)