PropertyValuesHolder
ObjectAnimator只能对单个属性进行操作,如果想实现比较复杂的效果就需要用到PropertyValuesHolder了。
1.1、概述
PropertyValuesHolder这个类的意义就是,它其中保存了动画过程中所需要操作的属性和对应的值。我们通过ofFloat(Object target, String propertyName, float… values)构造的动画,ofFloat()的内部实现其实就是将传进来的参数封装成 PropertyValuesHolder实例来保存动画状态。在封装成 PropertyValuesHolder实例以后,后期的各种操作也是以 PropertyValuesHolder 为主的。
创建PropertyValuesHolder实例的函数:
public static PropertyValuesHolder ofFloat(String propertyName, float... values)
public static PropertyValuesHolder ofInt(String propertyName, int... values)
public static PropertyValuesHolder ofObject(String propertyName, TypeEvaluator evaluator,Object... values)
public static PropertyValuesHolder ofKeyframe(String propertyName, Keyframe... values)
1.2、PropertyValuesHolder 之 ofFloat()、ofInt()讲解
构造函数:
public static PropertyValuesHolder ofFloat(String propertyName, float... values)
public static PropertyValuesHolder ofInt(String propertyName, int... values)
其中:
参数 | 描述 |
---|---|
propertyName: | 表示ObjectAnimator需要操作的属性名。即ObjectAnimator 需要通过反射查找对应属性的setProperty()函数的那个property |
values: | 属性所对应的参数,同样是可变长参数,可以指定多个, |
而ObjectAnimator 的 ofFloat 如下:
public static ObjectAnimator ofFloat(Object target, String propertyName, float... values);
可以看到在 ObjectAnimator.ofFloat 中只比 PropertyValuesHolder 的 ofFloat 多了一个target,其它都是完全一样的!
将构造的PropertyValuesHolder实例设置进 ObjectAnimator:
public static ObjectAnimator ofPropertyValuesHolder(Object target,PropertyValuesHolder... values)
其中:
参数 | 描述 |
---|---|
target: | 指需要执行动画的控件 |
values: | 是一个可变长参数,可以传进去多个 PropertyValuesHolder 实例,由于每个 PropertyValuesHolder 实例都会针对一个属性做动画,所以如果传进去多个 PropertyValuesHolder 实例,将会对控件的多个属性同时做动画操作。 |
示例代码:
xml:
<Button
android:id="@+id/bt_start_anim01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="启动动画(PropertyValuesHolder)"/>
<ImageView
android:id="@+id/iv_image01"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:src="@drawable/gold_coin"/>
java代码:
/**
* 使用PropertyValuesHolder 设置复杂动画
*/
private