实现倒计时逻辑比较简单,使用了CountDownTimer来计时(源码考虑了线程安全问题)。
对使用逻辑封装成了一个自定义控件TimerButton。
源代码:
public class TimerButton extends Button {
private String afterText = "重发";
private int ms = 10000;
public TimerButton(Context context) {
super(context);
}
public TimerButton(Context context, AttributeSet attrs) {
this(context,attrs,0);
}
public TimerButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.timerbutton);
afterText = typedArray.getString(R.styleable.timerbutton_afterText);
ms = typedArray.getInt(R.styleable.timerbutton_ms,10000);
typedArray.recycle();
}
public void init(String afterText,int ms){
this.afterText = afterText;
this.ms = ms;
}
public void startTimer(){
TimerButton.this.setEnabled(false);
new CountDownTimer(ms+1000,1000){
@Override
public void onTick(long finish) {
TimerButton.this.setText(finish/1000+" s");
}
@Override
public void onFinish() {
TimerButton.this.setEnabled(true);
TimerButton.this.setText(afterText);
}
}.start();
}
}
使用:
private TimerButton timerButton;
timerButton = (TimerButton) findViewById(R.id.timer_Button);
timerButton.setText("获取验证码")
timerButton.init("重发",10000);
timerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
timerButton.startTimer();
//TODO YOURS
//Toast.makeText(MainActivity.this,"TODO",Toast.LENGTH_SHORT).show();
}
});
Github:TimerButton