Android属性アニメーション詳細2、ValueAnimatorと補間器

3333 ワード

一、ValueAnimator詳細:
ValueAnimatorはアニメーション全体の核心であり、ObjectAnimatorはValueAnimatorから継承されて実現される.
ValueAnimatorは数値発生器のようなもので、一定の法則を持つ数字を生成し、異動者にアニメーションの実現過程を制御させる.
1、ValueAnimatorの使用:
  ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 100);
  valueAnimator.setDuration(1000).start();

  //               ,   “  ”,"  ",  "      " ,             
  //    :http://blog.sina.com.cn/s/blog_6e519585010157zt.html
  valueAnimator.setInterpolator(new DecelerateInterpolator());
 
  final int baseWidth  = animatorBt.getWidth();
  //valueAnimator  1000     0 100   ,           animation.getAnimatedValue()     ,           
  valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
      @Override
      public void onAnimationUpdate(ValueAnimator animation) {
          Float value = (Float) animation.getAnimatedValue();

          LogUtils.showLog("value "+value);

          //    value
          //1.    
          animatorBt.setTranslationX(value * 5);
          //2.     
          animatorBt.setAlpha(1 - (value) / 200);
          //3.  button   ,    ObjectAnimator        
          ViewGroup.LayoutParams params = animatorBt.getLayoutParams();
          params.width = (int) (baseWidth + value);

          LogUtils.showLog("   "+params.width);

          //   view                 
          animatorBt.requestLayout();
        }
      });
    }
   }, 1000);

2、ValueAnimatorアニメーションを停止する:
ValueAnimatorオブジェクトのcancel()メソッドまたはend()メソッドを呼び出すことができます.まず上記の2つの方法を呼び出すとアニメーションが停止しますが、違いは
1、cancel()を呼び出すと、ValueAnimatorはすぐに停止し、コールバックしません.
2、end()を呼び出すと、ValueAnimatorはこのアニメーションの終了状態の値を直接コールバックします.つまり、end()を呼び出すと、アニメーションは最後まで停止します.
二、Android補間器Interpolatorの使用:
[補間](Interpolator)では、アニメーションの減衰効果を実現できます.たとえば、[次第に減少](Increase Loop)、[次第に増加](Increase Loop)、[先に加速して減速](Pre-Accel)などです.
次に、一般的な補間機能をいくつか示します.
1、AccelerateInterpolator:アニメーションは開始から終了まで、変化率は加速する過程である.
2、DecelerateInterpolator:アニメーションは開始から終了まで、変化率は減速の過程である.
3、CycleInterpolator:アニメーションは開始から終了まで、変化率は所定回数の正弦波曲線を循環する.
4、AccelerateDecelerateInterpolator:アニメーションは開始から終了まで、変化率は先に加速してから減速する過程である.
5、LinearInterpolator:アニメーションは開始から終了まで、変化率は線形変化です.
1、使用方法:
 //          
  valueAnimator.setInterpolator(new DecelerateInterpolator());
ValueAnimatorの原理はそのソースコードを見ることができます.
   void animateValue(float fraction) {
        //fraction      0-1.0   ,    200-500,200ms  , 200ms ,fraction  0-1.0f      ,              ,      ,fraction      x 
        //     x         
        fraction = mInterpolator.getInterpolation(fraction);
        mCurrentFraction = fraction;
        int numValues = mValues.length;
        for (int i = 0; i < numValues; ++i) {
            mValues[i].calculateValue(fraction);
        }
        //            
        if (mUpdateListeners != null) {
            int numListeners = mUpdateListeners.size();
            for (int i = 0; i < numListeners; ++i) {
                mUpdateListeners.get(i).onAnimationUpdate(this);
            }
        }
    }
、カスタム補間:
//  ,            ,    BaseInterpolator   ,           :
float getInterpolation(float input);//input     0-1.0f x ,       0-1.0f y 。