4

次のような double 値の 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

それは私にこれを与えまし:

整数のカウントアップを使用して TypeEvaluator メソッドを実装すると、機能します。なぜダブルではないのですか?

4

2 に答える 2

4

animator.setObjectValues(0, 50.5);intこの行では 0 を値 と見なします

この行を

animator.setObjectValues(0d, 50.5d); //ダブル値

于 2016-09-14T09:19:28.670 に答える
3

ここで、エバリュエータの戻り値の型が double であるためClassCastException発生しました。どの値が返されるか。 したがって、 (endValue - startValue) * fractionの値を double に型キャストします。変更後、コードは次のようになります。

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 に答える