首先我们需要写一个NumberView继承自TextView
public class NumberView extends TextView
写一个私有方法实现数值增加动画,用到了ValueAnimator,其中mStartNumber为起始数值,mEndNumber为结束数值,mDuration为动画持续的时间。为该valueAnimator添加一个AnimatorUpdateListener,监听每一次的数值更新,实现onAnimationUpdate方法,将更新后的数值格式化后设置到TextView中,就是这么简单。
private void runAnimator() {
ValueAnimator valueAnimator = ValueAnimator.ofFloat(mStartNumber,
mEndNumber);
valueAnimator.setDuration(mDuration);
valueAnimator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator va) {
Float f = Float.parseFloat(va.getAnimatedValue().toString());
if(f.floatValue()==mEndNumber){
isRunning=false;
}
setText(mDecimalFormat.format(f.floatValue()));
}
});
valueAnimator.start();
}
之后再写一个start()方法,包装runAnimator方法。
public void start(float startNumber, float endNumber, long duration) {
if(!isRunning){
isRunning=true;
mStartNumber = startNumber;
mEndNumber = endNumber;
mDuration = duration;
mDecimalFormat = new DecimalFormat(".00");
runAnimator();
}
}
github