Android开发-动画 属性动画(Attribute Animation)

158 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

前面我们已经介绍了动画实现的2种类型了,主要是帧动画(Frame Animation)和(Tween Animation),从实现上来看,他们都比较简单,能够快速的上手并且实现简单的View动画效果,包括渐变,缩放,位移以及旋转等一系列的单动画或者组合动画,但是他们都是通过改变View的呈现在用户面前的视觉效果来实现动画的,没有改变当前View的属性,也就是错觉,没错,就是视觉给你带来的效果,View的任何属性都没有改变。

他们都有一系列的缺点,比如作用对象局限,只针对View;没有改变View的属性,只是视觉效果;动画效果单一,只能实现平移、旋转、缩放 & 透明度这些简单的动画需求,一旦遇到相对复杂的动画效果,他们都无法实现,基于这些缺点,才有了属性动画的诞生,属性动画是Android 11之后才加入的,它可以对任何对象做动画。

属性动画的定义以及分类

定义

其实前面已经简单介绍过了属性动画的原理,一句话就是通过修改控件的属性值实现的动画。那么对于这样的原理,定义出来的意思就是:在一定时间间隔内,通过不断对值进行改变,并不断将该值赋给对象的属性,从而实现该对象在该属性上的动画效果。

属性动画的分类

前面介绍补间动画有四个分类,最后一种其实是前面四种的组合。那么属性动画有几种分类呢,它只有2种: ValueAnimator 和 ObjectAnnimator。

ValueAnimator

字面意思可以理解成Value值的动画,那么它的实现原理就是:通过不断控制值的变化,再不断手动赋值给对象的属性,这样就实现属性动画的效果。

ObjectAnnimator

字面意思理解是对象值的动画,它的实现原理是:通过改变对象的属性值来实现动画效果。

这么解释怎么看都好像2个没有实质上的区别,都是改变属性值,来实现对象的动画效果,其实本质上是没有太大区别,要说区别就是,ValueAnimator是间接的改变对象的属性值,而ObjectAnnimator是直接的改变对象的属性值,而且还有一点需要注意ObjectAnnimator是继承自ValueAnimator,所以底层的实现还是基于ValueAnimator类。