Android 属性动画(六)使用 ViewPropertyAnimator 实现多属性动画效果
一、前言
在前面章节中,提到了 使用 AnimatorSet 编排多个动画,通过 AnimatorSet
可以直接为一个目标对象的多个属性添加动画效果。对于实现由多个属性并行的动画效果,还有一种更优的方案,那就是 ViewPropertyAnimator
。
二、使用 ViewPropertyAnimator 实现多属性动画效果
ViewPropertyAnimator
有助于使用单个底层 Animator
对象轻松为 View
的多个属性并行添加动画效果。它的行为方式与 ObjectAnimator
非常相似,因为它会修改视图属性的实际值,但在同时为多个属性添加动画效果时,它更为高效。此外,使用 ViewPropertyAnimator
的代码更加简洁,也更易读。
ViewPropertyAnimator
实现多属性动画非常简单,每个属性的动画用一个 PropertyValuesHolder
定义,然后用 ValueAnimator.ofPropertyValuesHolder()
或者 ObjectAnimator.ofPropertyValuesHolder()
将所有属性包含进来。
- 示例:
val pvhScaleX = PropertyValuesHolder.ofFloat("scaleX", 1.0f, 1.5f)
val pvhScaleY = PropertyValuesHolder.ofFloat("scaleY", 1.0f, 2.0f)
ObjectAnimator.ofPropertyValuesHolder(imageView, pvhScaleX, pvhScaleY)
- 实现效果
注意事项:
1.ValueAnimator.ofPropertyValuesHolder()
和ObjectAnimator.ofPropertyValuesHolder()
两个方法的参数不一致。ObjectAnimator.ofPropertyValuesHolder()
第一个参数为目标对象,第二个参数是PropertyValuesHolder
数组,如果使用 kotlin 语言编写,第一个参数如果为null
, 请确保将null
转为Any
(null as Any?
),否则编译器会把他当做一个PropertyValuesHolder
对象。
2. 如果使用ValueAnimator.ofPropertyValuesHolder()
组合动画,必须添加监听,并在监听中通过getAnimatedValue(String propertyName)
方法获取相应属性的值。
编后语
ViewPropertyAnimator
适用于多个属性并行的多属性动画效果,AnimatorSet
虽然可以实现同样的效果,对于多个属性并行的多属性动画效果,请使用性能会更佳的 ViewPropertyAnimator
。
上一篇:Android 属性动画(五)为 ViewGroup 布局更改添加动画效果
下一篇:Android 属性动画(七)使用 ViewPropertyAnimator 实现多属性动画效果