属性动画的使用

676 阅读1分钟

属性动画分类:

  • 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()
}