前言
补间动画只是视觉上产生变化,并不是真正的位置上的变化,而属性动画则弥补了补间动画的缺点,真正改变了View的属性,并且可以自定义插值器,实现各种效果。
作用对象
不再局限于视图View对象,可以是任意 Java 对象。
继承关系
View动画的基类是Animation,属性动画的基类是Animator
-
ValueAnimator:这个动画是针对属性的值进行动画的 ,不会对UI造成改变,不能直接实现动画效果。需要通过对动画的监听去做一些操作,在监听中将这个值设置给对应的属性,对应的属性才会改变。
-
ObjectAnimator:直接动画所给的对象,他会调用对象对应属性的get/set方法吧属性的值设置给对象的属性,直接实现动画效果。
-
TimeAnimator:这个也不直接实现动画效果,只是提供一个监听回调,返回动画执行的总时间,距离上次动画执行的时间等(每个16或17ms回调一次方法)。
使用方式
1. ValueAnimator
ValueAnimator只对值进行动画,不会对UI产生实质性的改变,需要添加事件监听,下面是view的透明度动画实例
ValueAnimatorBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ValueAnimator valueAnimator = ValueAnimator.ofFloat(1f,0f);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
view.setAlpha((float) animation.getAnimatedValue());
}
});
valueAnimator.setDuration(1000);
valueAnimator.start();
}
});
常见方法
| 方法名称 | 含义 |
|---|---|
| valueAnimator.setDuration(); | 设置动画时间 |
| valueAnimator.setRepeatCount(); | 设置重复次数 |
| valueAnimator.setInterpolator(); | 设置插值器 |
| valueAnimator.setRepeatMode(); | 设置重复模式 |
| valueAnimator.setStartDelay; | 设置延迟 |
2. ObjectAnimator
ObjectAnimator是ValueAnimator的子集,可以直接对对象属性进行操作,相对而言,使用ObjectAnimator实现动画要更简单。
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 1f, 0f);
animator.setDuration(1000);//时间1s
animator.start();
常用属性值:
Alpha、TranslationX、TranslationY、ScaleX、Rotation、RotationX、RotationY
ObjectAnimator.ofFloat(imageView, "alpha", 1f, 0f, 1f);
ObjectAnimator.ofFloat(imageView, "rotation", 0f, 360f, 0f);
ObjectAnimator.ofFloat(imageView, "translationX", 0f, -300f, 0f);
ObjectAnimator.ofFloat(imageView, "scaleX", 1f, 2f, 1f);
效果演示