Android属性アニメーション詳細2、ValueAnimatorと補間器
3333 ワード
一、ValueAnimator詳細:
ValueAnimatorはアニメーション全体の核心であり、ObjectAnimatorはValueAnimatorから継承されて実現される.
ValueAnimatorは数値発生器のようなもので、一定の法則を持つ数字を生成し、異動者にアニメーションの実現過程を制御させる.
1、ValueAnimatorの使用:
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はアニメーション全体の核心であり、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 。