属性动画分类:
- ValueAnimator
- ObjectAnimator
属性动画的本质是通过不断set的方式去修改对象,因此是否能设置属性动画取决于是否有set和set方法。
ValueAnimator有三种分类分别是: - ofInt
- ofFloat
- ofObject 这三个最主要的区别是传入属性的数值类型不同,主要的看AnimatorUpdateListener这个接口实现,接口实现如下:
ValueAnimator animator = ValueAnimator.ofInt(1);
animator.setDuration(10000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//获取此值然后根据自己的需求,进行赋值和更改对象
int curValue = (int) animation.getAnimatedValue();
}
});
ofInt和ofFloat比较简单可以直接实现以上方式即可,ofObject使用相对麻烦,麻烦的原因是因为ofInt和ofFloat自带估值器,ofObject需要自己实现估值器。
animator.setEvaluator(new TypeEvaluator() {
@Override
public Object evaluate(float fraction, Object startValue, Object endValue) {
//fraction指的是当前的比列,startValue开始时的值,
//endValue开始时的值,返回的值就是ValueAnimator.getAnimatedValue()
return null;
}
});
ObjectAnimator是通过传入的String找到对应的属性值。
ObjectAnimator.ofInt(tx,"Roation",1,2,3);
但是这些只能实现单一的动画。很多情况下,我们即需要透明度变化也需要旋转变化等等乱七八糟的动画,这种组合需要的是AnimatorSet解决。
AnimatorSet().apply {
//主要是4个方法,play(),after(),before(),with()这个是指展示不同动画的时机
play(animator).after(animator2).before(animator3).with(animator4)
duration = 3*1000
start()
}