ValueAnimator是属性动画机制中的核心类,它的内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要告诉它初始值和最终值以及动画运行时长,ValueAnimator就好会帮助我们完成初始值到结束值得的平滑效果。这个类有的人说不常用,但是本人的体会是用它的场景非常多,比如涉及到数字相关的场景就非常多。
举例一、为ProgressBar设置值得:
private void startAnimation(int progress){
ValueAnimator animator = ValueAnimator.ofInt(0,getMax(),progress);
animator.setInterpolator(new DecelerateInterpolator());
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int current = (int) animation.getAnimatedValue();
setProgress(current);
}
});
animator.setDuration(1000);
animator.start();
}
运行效果如下:
这样的效果就给人感觉很舒服。
举例二、从小到大的变化数字之前就见过网友通过重写TextView通过Runnable来模仿余额宝的收益,
用ValueAnimator就很方便的实现了。
private TextView tv_num;
tv_num = (TextView)findViewById(R.id.tv_num);
private void startAnimation(float progress){
ValueAnimator animator = ValueAnimator.ofFloat(0,progress);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float current = (float)animation.getAnimatedValue();
current = (float)(Math.round(current*100))/100;
tv_num.setText(current+"");
}
});
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.setDuration(5000);
animator.start();
}
效果如下: