4

我正在尝试在 TextView 中为这样的 double 值制作 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 line animator.setEvaluator(new TypeEvaluator() at animator.start();

如果我使用整数计数并实现 TypeEvaluator 方法,它就可以工作。为什么不加双?

4

2 回答 2

4

animator.setObjectValues(0, 50.5); 在这一行 0 认为是int价值

将此行更改为

animator.setObjectValues(0d, 50.5d); //双值

于 2016-09-14T09:19:28.670 回答
3

这里发生了ClassCastException,因为评估器的返回类型是 double。但是在返回语句中完成了一些算术运算,其中 float(fraction)值乘以 double 值(endValue - startValue),编译器会因为它不知道而感到困惑将返回哪个值。因此将 (endValue - startValue) * 分数的值类型转换为双倍。修改后代码应如下所示

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();
于 2016-09-14T09:19:13.330 回答