package com.finddreams.baselib.view; import java.util.Timer; import java.util.TimerTask; import android.content.Context; import android.graphics.Color; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.widget.Button; /** * @Description:发送验证码的button,带有倒计时,以及在发送的过程中不可点击; * 调用方式 view.startTickWork()方法即可; * @author http://blog.csdn.net/finddreams */ public class SendValidateButton extends Button { private static final int DISABLE_TIME = 60; private static final int MSG_TICK = 0; private Timer mTimer = null; private TimerTask mTask = null; private int mDisableTime = DISABLE_TIME; // 倒计时时间,默认60秒 private int mEnableColor = Color.WHITE; private int mDisableColor = Color.GRAY; private String mEnableString = "获取验证码"; private String mDisableString = "剩余"; private String Second = "秒"; private boolean mClickBle = true; private SendValidateButtonListener mListener = null; public int getmDisableTime() { return mDisableTime; } public int getmEnableColor() { return mEnableColor; } public void setmEnableColor(int mEnableColor) { this.mEnableColor = mEnableColor; this.setTextColor(mEnableColor); } public int getmDisableColor() { return mDisableColor; } public void setmDisableColor(int mDisableColor) { this.mDisableColor = mDisableColor; } public String getmEnableString() { return mEnableString; } public boolean isDisable() { if (mDisableTime > 0) { return true; } return false; } public void setmEnableString(String mEnableString) { this.mEnableString = mEnableString; if (this.mEnableString != null) { this.setText(mEnableString); } } public String getmDisableString() { return mDisableString; } public void setmDisableString(String mDisableString) { this.mDisableString = mDisableString; } public void setmListener(SendValidateButtonListener mListener) { this.mListener = mListener; } private Handler mHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_TICK: tickWork(); break; default: break; } super.handleMessage(msg); } }; public SendValidateButton(Context context, AttributeSet attrs) { super(context, attrs); initView(); } private void initView() { this.setText(mEnableString); this.setGravity(Gravity.CENTER); this.setTextColor(mEnableColor); initTimer(); this.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mListener != null && mClickBle) { // startTickWork(); mListener.onClickSendValidateButton(); } } }); } private void initTimer() { mTimer = new Timer(); } private void initTimerTask() { mTask = new TimerTask() { @Override public void run() { mHandler.sendEmptyMessage(MSG_TICK); } }; } public void startTickWork() { if (mClickBle) { mClickBle = false; SendValidateButton.this.setText(mDisableString + mDisableTime + Second); this.setEnabled(false); SendValidateButton.this.setTextColor(mDisableColor); initTimerTask(); mTimer.schedule(mTask, 0, 1000); } } /** * 每秒钟调用一次 */ private void tickWork() { mDisableTime--; this.setText(mDisableString + mDisableTime + Second); if (mListener != null) { mListener.onTick(); } if (mDisableTime <= 0) { stopTickWork(); } } public void stopTickWork() { mTask.cancel(); mTask = null; mDisableTime = DISABLE_TIME; this.setText(mEnableString); this.setTextColor(mEnableColor); this.setEnabled(true); mClickBle = true; } public interface SendValidateButtonListener { public void onClickSendValidateButton(); public void onTick(); } }