最近用到了就写了一个自定义的60秒按钮
做法大致就是
1.继承Button类
2.用CountDownTimer来计时(本来想用Handler或者TimerTask的,后面发现这个好简单就用了这个)
3.创建一个接口 来实现点击事件需要做的操作
代码如下
TimeButton类
public class TimeButton extends Button implements View.OnClickListener {
public interface ITimeButtonOnClickListener {
void onClick(View v);
}
private int time = 60 * 1000;
private ButtonCountDownTimer timer;
private ITimeButtonOnClickListener listener;
private String defaulttext = "点击获取验证码";
private String timetext = "s后重新获取";
public TimeButton(Context context) {
super(context);
init();
}
public TimeButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public TimeButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
timer = new ButtonCountDownTimer(time, 1000);
setOnClickListener(this);
}
private void setButtonText(String text) {
this.setText(text);
}
private void setIsOnClick(boolean b) {
this.setClickable(b);
}
public void addButtonListener(ITimeButtonOnClickListener listener) {
this.listener = listener;
}
public void setDefualtText(String text) {
defaulttext = text;
}
public void setTimetext(String text) {
timetext = text;
}
@Override
public void onClick(View v) {
timer.start();
if (listener != null) {
listener.onClick(v);
}
}
private class ButtonCountDownTimer extends CountDownTimer {
/**
* @param millisInFuture The number of millis in the future from the call
* to {@link #start()} until the countdown is done and {@link #onFinish()}
* is called.
* @param countDownInterval The interval along the way to receive
* {@link #onTick(long)} callbacks.
*/
public ButtonCountDownTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
setButtonText(millisUntilFinished / 1000 + timetext);
setIsOnClick(false);
}
@Override
public void onFinish() {
timer.cancel();
setButtonText(defaulttext);
setIsOnClick(true);
}
}
}
<com.toollibrary.TimeButton.TimeButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tbtn_yzm"
android:text="点击获取验证码" />
TimeButton tbtn = (TimeButton) view.findViewById(R.id.tbtn_yzm);
tbtn.addButtonListener(new TimeButton.ITimeButtonOnClickListener() {
@Override
public void onClick(View v) {
Tools.showTip(getActivity(),"点击获取验证码");
}
});
其中显示吐司就是在接口上面实现的
一个小记录吧!