最近用到了就写了一个自定义的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); } } }然后再xml文件里面加入即可 <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(),"点击获取验证码"); } }); 其中显示吐司就是在接口上面实现的
一个小记录吧!