Android TextView 上的计数效果的 ValueAnimator
ValueAnimator for count up effect on Android TextView
我正在尝试在 TextView 中为这样的双精度值制作 cout-up 效果:
ValueAnimator animator = new ValueAnimator();
animator.setObjectValues(0, 50.5); //double value
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
textView.setText(String.valueOf(animation.getAnimatedValue()));
}
});
animator.setEvaluator(new TypeEvaluator<Double>() { // problem here
@Override
public Double evaluate(float fraction, Double startValue, Double endValue) {
return (startValue + (endValue - startValue) * fraction);
}
});
animator.setDuration(3000);
animator.start();// problem here
它给了我这个:java.lang.ClassCastException:java.lang.Integer cannot be cast to java.lang.Double at the line animator.setEvaluator(新类型评估器() 在animator.start();
如果我使用整数计数并实施 TypeEvaluator 方法,它就可以工作。为什么不加倍?
此处 ClassCastException 发生,因为 return 类型的求值器是 double.But 在 return 语句中完成了一些算术运算,其中float (fraction) 值乘以 double 值 (endValue - startValue) 编译器会感到困惑,因为它不知道要计算哪个值returned.Hence 将 (endValue - startValue) * fraction 的值类型转换为 double.After 修改代码应该看起来像
ValueAnimator animator = new ValueAnimator();
animator.setObjectValues(0d, 50.5d); //double value
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
textView.setText(String.valueOf(animation.getAnimatedValue()));
}
});
animator.setEvaluator(new TypeEvaluator<Double>() { // problem here
@Override
public Double evaluate(float fraction, Double startValue, Double endValue) {
return (startValue + (double)((endValue - startValue) * fraction));
}
});
animator.setDuration(3000);
animator.start();
animator.setObjectValues(0, 50.5);
在这一行 0 视为 int
值
将此行更改为
animator.setObjectValues(0d, 50.5d)
; //双倍值
我正在尝试在 TextView 中为这样的双精度值制作 cout-up 效果:
ValueAnimator animator = new ValueAnimator();
animator.setObjectValues(0, 50.5); //double value
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
textView.setText(String.valueOf(animation.getAnimatedValue()));
}
});
animator.setEvaluator(new TypeEvaluator<Double>() { // problem here
@Override
public Double evaluate(float fraction, Double startValue, Double endValue) {
return (startValue + (endValue - startValue) * fraction);
}
});
animator.setDuration(3000);
animator.start();// problem here
它给了我这个:java.lang.ClassCastException:java.lang.Integer cannot be cast to java.lang.Double at the line animator.setEvaluator(新类型评估器() 在animator.start();
如果我使用整数计数并实施 TypeEvaluator 方法,它就可以工作。为什么不加倍?
此处 ClassCastException 发生,因为 return 类型的求值器是 double.But 在 return 语句中完成了一些算术运算,其中float (fraction) 值乘以 double 值 (endValue - startValue) 编译器会感到困惑,因为它不知道要计算哪个值returned.Hence 将 (endValue - startValue) * fraction 的值类型转换为 double.After 修改代码应该看起来像
ValueAnimator animator = new ValueAnimator();
animator.setObjectValues(0d, 50.5d); //double value
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
textView.setText(String.valueOf(animation.getAnimatedValue()));
}
});
animator.setEvaluator(new TypeEvaluator<Double>() { // problem here
@Override
public Double evaluate(float fraction, Double startValue, Double endValue) {
return (startValue + (double)((endValue - startValue) * fraction));
}
});
animator.setDuration(3000);
animator.start();
animator.setObjectValues(0, 50.5);
在这一行 0 视为 int
值
将此行更改为
animator.setObjectValues(0d, 50.5d)
; //双倍值