Android アニメーション プロパティ アニメーション ValueAnimator

プロパティ アニメーション 2 プロパティ アニメーション

ValueAnimator (差分アニメーション)

文字通り単純に理解すると、ObjectAnimator は実際のオブジェクトに作用し、ValueAnimatorはObjectAnimatorの親クラスであり、抽象クラスAnimatorから継承されます. これは値に作用し、ある値から別の値に変更し、値に従って特定の規則に従って、Viewの位置、透明度、回転角度、サイズなど、 Viewのプロパティを動的に変更して、アニメーション効果を完成させます。

 

/*
    ここでは、ValueAnimatorインスタンスがofFloat()メソッドによって構築されます。さらに、他の関数ofInt() ofObject() ofPropertyValuesHolder()が提供されます。api
     
    21以降、 ofArgb()が提供されます。各関数は複数変更されます。値を渡すことができます。
 */ public void initAnim () { 
    ValueAnimator valueAnimator = ValueAnimator.ofFloat ( 0f , 126512.36f ) ; valueAnimator.setDuration
     ( 2000 ) ;
     valueAnimator.setInterpolator( new LinearInterpolator()) ;
    
valueAnimator.addUpdateListener( new ValueAnimator.AnimatorUpdateListener() {
         @Override
         public void onAnimationUpdate (ValueAnimator animation) {
             float money = ( float ) animation.getAnimatedValue() ;
             mTextView .setText(String. format ( "%.2f" , money)) ;
         } 
    }) ;
    valueAnimator.start() ;
}

 

補間器

//補間器をカスタマイズする方法? 例: 最初に減速してから加速するインターポレーターを実装します. コードは次のとおりです
public class DecelerateAccelerateInterpolator implements Interpolator {
     @Override
     public float getInterpolation ( float input) {
         float result ; 
        if (input <= 0.5f ) { 
            result = ( float ) (Math. sin (Math. PI * 入力)) / 2.0f ;
         } else { 
            result = ( float ) ( 2 - Math. sin (Math. sin (Math. PI * 入力))PI * 入力)) / 2.0f ;
        結果を返します
        。
    } 
}

 

TypeEvaluator

//TypeEvaluator (Evaluator)
 /* 
TypeEvaluator は、現在の属性変更のパーセンテージに従って、変更された属性値を計算するために使用されます。システムは、次の推定器を提供します: 整数属性の IntEvaluator 整数属性
セット
IntArrayEvaluator浮動小数点の
FloatEvaluatorポイント属性
FloatArrayEvaluator浮動小数点属性セット用です
ArgbEvaluator  はColor属性用です
RectEvaluatorはRect属性用です
PointFEvaluatorはPointF属性用です
*/

 

//インターフェイスはevaluate(float fraction, T startValue, T endValue) を提供します; // アニメーションの実行中、Interpolator は実行中のアニメーションの割合を自動的に計算します //
次にTypeEvaluator現在アニメーション属性値
を以下に従って計算します分数。public class FloatEvaluator implements TypeEvaluator<Number> {
     public Float evaluate ( float fraction , Number startValue , Number endValue) {
         float startFloat = startValue.floatValue() ; 
        return startFloat+ 分数 * (endValue.floatValue() - startFloat ) ;
    } 
}

 

カスタム TypeEvaLuator

// TypeEvaLuatorをカスタマイズする方法は? たとえば、お金が増えてフォントの色が赤くなるアニメーションを実現したい、
 //今では ofArgb() が使えることはみんな知っているがofArgb()を使うにはapi 21以上
が必要、 //だからここでArgbEvaLuatorをカスタマイズする必要があります。カスタム// TypeEvaluatorを実証するために、
 API 21で提供されているArgbEvaluatorソース コード
を直接使用してpublic class TextArgbEvaluator implements TypeEvaluator { public Object evaluate ( float fraction , Object startValue , Object endValue) {
         int startInt

     = (Integer) startValue;
        int startA = (startInt >> 24) & 0xff;
        int startR = (startInt >> 16) & 0xff;
        int startG = (startInt >> 8) & 0xff;
        int startB = startInt & 0xff;

        int endInt = (Integer) endValue;
        int endA = (endInt >> 24) & 0xff;
        int endR = (endInt >> 16) & 0xff;
        int endG = (endInt >> 8) & 0xff;
        int endB = endInt & 0xff;

        return (int) ((startA + (int) (fraction * (endA - startA))) << 24) |
                (int) ((startR + (int) (fraction * (endR - startR))) << 16) |
                (int) ((startG + (int) (fraction * (endG - startG))) << 8) |
                (int) ((startB + (int) (fraction * (endB - startB))));
    }
}

 

调用方式

//调用方式:
public void ss() {
    AnimatorSet animatorSet = new AnimatorSet();
    ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 126512.36f);
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float money = (float) animation.getAnimatedValue();
            Log.e("Interpolator", "money---->" + money);
            mTextView.setText(String.format("%.2f", money));
        }
    });

    int startColor = Color.parseColor("#FCA3AB");
    int endColor = Color.parseColor("#FB0435");
    ValueAnimator colorAnimator = ValueAnimator.ofObject(new TextArgbEvaluator(), startColor, endColor);
    colorAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            int color = (int) animation.getAnimatedValue();
            Log.e("Interpolator", "color---->" + color);
            mTextView.setTextColor(color);
        }
    });

    animatorSet.playTogether(valueAnimator, colorAnimator);
    animatorSet.setDuration(5000);
    animatorSet.setInterpolator(new LinearInterpolator());
    animatorSet.start();
}

 

おすすめ

転載: blog.csdn.net/l331258747/article/details/70858290