Android 动画类型主要分为三种:帧动画、补间动画、属性动画
帧动画:原理是多张图片在一段时间的不断替换,给人一种视觉上的动画效果。
补间动画(Animation):给人视觉上的动画效果,并没有实际改变view的属性,用途不太广泛。
属性动画(Animator):通过控制view在一段时间间隔内的属性,来达到动画效果,真正的改变了view的属性。
TimeInterpolator:时间差值器
差值器:根据时间流逝的百分比计算当前属性值改变的百分比
系统已有的差值器:
linearInterpolator:(线性差值器):匀速动画
AccelerateDecelerateInterpolator:(加速减速差值器):动画两头慢,中间快,,先加速,后减速
DecelerateInterpolator:(减速差值器):动画越来越慢
TypeEvaluator:(类型估值算法,估值器)
估值器的作用:根据当前属性改变的百分比来计算改变后的属性值。
系统已有的估值器:
IntEvaluator:针对整形属性
FloatEvaluator:针对浮点型属性
ArgbEvaluator:针对Color属性
自定义估值器实例代码:
class Point {
float x;
float y;
public Point() {
}
public Point(float x, float y) {
this.x = x;
this.y = y;
}
}
class MyTypeEvaluatorimplements TypeEvaluator{
@Override
public Pointevaluate(float fraction, Point startValue, Point endValue) {
Point point =new Point();
//fraction *1.5f 就是时间
//fraction 表示时间流逝的百分比,1.5代表1.5s
point.x=200*(fraction*1.5f);
point.y=200*(fraction*1.5f)*(fraction*1.5f);
return point;
}
}
/**
* 抛物线
*/
public void paowuxian(View view){
ValueAnimator valueAnimator = ValueAnimator.ofObject(new MyTypeEvaluator(), new Point(0, 0));
valueAnimator.setDuration(1500);
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Point point = (Point) animation.getAnimatedValue();
smartRefreshLayout.setX(point.x);
smartRefreshLayout.setY(point.y);
}
});
}