简单的倒计时自定义控件
(注:做项目过程中少不了发送验证码的功能,以前写的时候我都是直接写在Activity里面的,将逻辑代码和业务代码混在了一起,实在是low的不行);最近做了个简单的自定义倒计时控件,是对TextView的简单封装,实现了将业务和逻辑分开,并对外提供了简单设置点击前后背景变化的接口)效果图如下:
代码比较简单:
<span style="font-size:14px;">public class CountDownButton extends TextView {
private int mTotolTime = 60;
private int mInterval = 1;
private int mNormalColor=0xffffaacc;//默认正常颜色
private int mDownColor=0xff999999;//按下的颜色
private OnClickListener mClickListener;
int temp;
private CountDownTimer mCountDownTimer;
public CountDownButton(Context context) {
super(context);
init();
}
public CountDownButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setClickable(false);
startCountDown();
// 从外部实现接口,可以处理点击事件等,要处理的逻辑,比如点击时调用发送验证码的接口;倒计时,读秒不可点击等事件控件本身已经实现。
if(mClickListener!=null){
mClickListener.onClick(v);
}
}
});
}
public void setClickListener(OnClickListener listener){
mClickListener=listener;
}
//设置总时长
public void setTotolTime(int totolTime) {
mTotolTime = totolTime;
setText(mTotolTime+"秒后重新发送");
temp=totolTime;
}
// 设置时间间隔
public void setInvertal(int invertal) {
mInterval = invertal;
}
public void setNormalColor(int normalColor){
mNormalColor=normalColor;
}
public void setDownColor(int downColor){
mDownColor=downColor;
}
private void startCountDown() {
temp=mTotolTime;
if (mCountDownTimer == null) {
mCountDownTimer = new CountDownTimer(mTotolTime*1000, mInterval*1000) {
@Override
public void onTick(long millisUntilFinished) {
setText(--temp+"秒后重新发送");
setBackgroundColor(mDownColor);
}
@Override
public void onFinish() {
setText("重新发送");
setClickable(true);
setBackgroundColor(mNormalColor);
}
};
}
mCountDownTimer.start();
}
}</span>
下面是源代码:
http://download.csdn.net/detail/themelove/9422257