package com.dajun.ccpp.customview;
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;
import com.mukr.zc.R;
public class SDSendValidateButton 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.WHITE;
private final int mTextSize = 12;
private String mEnableString = getResources().getString(R.string.get_verification_code);
private String mDisableString = getResources().getString(R.string.again_send_verification_code);
private boolean mClickBle = true;
private SDSendValidateButtonListener 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 void setmEnableString(String mEnableString)
{
this.mEnableString = mEnableString;
if (mEnableString != null)
{
this.setText(mEnableString);
}
}
public String getmDisableString()
{
return mDisableString;
}
public void setmDisableString(String mDisableString)
{
this.mDisableString = mDisableString;
}
public void setmListener(SDSendValidateButtonListener 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 SDSendValidateButton(Context context, AttributeSet attrs)
{
super(context, attrs);
initView();
}
private void initView()
{
this.setText(mEnableString);
this.setGravity(Gravity.CENTER);
this.setTextColor(mEnableColor);
this.setTextSize(mTextSize);
this.setPadding(15, 10, 15, 10);
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;
SDSendValidateButton.this.setText(mDisableTime + mDisableString);
SDSendValidateButton.this.setTextColor(mDisableColor);
initTimerTask();
mTimer.schedule(mTask, 0, 1000);
}
}
/**
* 每秒钟调用一次
*/
private void tickWork()
{
mDisableTime--;
this.setText(mDisableTime + mDisableString);
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);
mClickBle = true;
}
public interface SDSendValidateButtonListener
{
public void onClickSendValidateButton();
public void onTick();
}
}
整个工具类,这个是本人从项目中直接 贴出来的,复用性比较强,仅供初学者参考,学习,这只是xml引用这个工具类,java实现点击,倒计时看下面:
@ViewInject(R.id.act_save_reset_pwd_btn_send_add_bank)
private SDSendValidateButton mBtn_send_mobile_add_bank = null;
<pre name="code" class="java">mBtn_send_mobile_add_bank
.setmListener(new SDSendValidateButtonListener() {
@Override
public void onTick() {
}
@Override
public void onClickSendValidateButton() {
requestAddbank1();
}
});
<span style="font-size:24px;color:#FF0000;">requestAddbank1()这个方法是想服务器发送请求,获取actAddModel.getResponse_code()==1</span>
表示请求发送验证码成功,开始实现,倒计时:
if (actAddModel.getResponse_code().equals("1")) {
mBtn_send_mobile_add_bank.startTickWork();
}