前几天需求要做一个倒计时的按钮。网上找了一堆,都是没有关键部分的代码,看的人也云里雾里的,索性自己写一个。因为是现在只考虑4.0以上的系统,后来干脆想到通过ValueAnimator 去实现,代码相当简洁。就直接上核心代码,继承自Button按钮。
public class CountDownButton extends Button {
public CountDownButton(Context context) {
super(context);
}
public CountDownButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void startCountDown(int Time, final String title) {
ValueAnimator animator = ValueAnimator.ofInt(Time, 0);
animator.setInterpolator(new LinearInterpolator());
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Integer integer = (Integer) animation.getAnimatedValue();
setText(String.valueOf(integer) + title);
if (integer == 0 && null != countFinish) {
countFinish.onFinish();
}
}
});
animator.setDuration(Time * 1000);
animator.start();
}
private CountFinish countFinish;
public void setCountFinish(CountFinish countFinish) {
this.countFinish = countFinish;
}
/**
*
* CopyRight (c)2015:
*
* @ClassName: CountFinish
* @Description: 倒计时结束时会触发的回调接口
* @author Hankun
* @date 2015年7月7日 下午5:49:35
*
*/
public interface CountFinish {
/**
*
* @Title: onFinish
* @Description: 倒计时结束时回调该方法
*
* @return void
*
*/
void onFinish();
}
代码相当简单,继承自Button 方便使用,startCountDown 在这里设置显示的内容和 倒计时的时间,setCountFinish 这里倒计时完成后会调用。使用起来非常方便。如果在倒计时的阶段不允许点击,只要设置一个boolean变量去控制下事件的触发就可以,相当便捷