我们发现,ValueAnimator
使用起来,代码量还是比较多的,我们总是要注册一个监听器,来不停的获得当前值,然后根据这个值修改对象。 我们想要使用简单一些,所以提供了ObjectAnimator
这个类。
ObjectAnimator
关心到底是作用在那个对象上的哪个属性上。他也提供了很多以of
开头的静态方法,用来创建自身的实例。这些方法如下:
public static ObjectAnimator ofArgb(Object target, String propertyName, int... values)
public static ObjectAnimator ofInt(Object target, String propertyName, int... values)
public static ObjectAnimator ofFloat(Object target, String propertyName, float... values)
public static ObjectAnimator ofObject(Object target, String propertyName, TypeEvaluator evaluator, Object... values)
public static ObjectAnimator ofPropertyValuesHolder(Object target, PropertyValuesHolder... values)
target
通常是View
和子类的实例,propertyName
是target
对象中存在的属性, 而且target
对象必须通过反射,能够调用他的setXXX
方法,XXX
就是把propertyName
中的第一个字母大写后的。
下面是View
这个类中提供的一些setter方法:
//1、透明度:alpha
public void setAlpha(float alpha)
//2、旋转度数:rotation、rotationX、rotationY
public void setRotation(float rotation)
public void setRotationX(float rotationX)
public void setRotationY(float rotationY)
//3、平移:translationX、translationY
public void setTranslationX(float translationX)
public void setTranslationY(float translationY)
//4、缩放:scaleX、scaleY
public void setScaleX(float scaleX)
public void setScaleY(float scaleY)
示例1:
TextView tv = (TextView)findViewById(R.id.text_view);
ObjectAnimator.ofFloat(tv, "rotationX", 0, 270, 0).setDuration(2000).start();
等同于如下:
TextView tv = (TextView)findViewById(R.id.text_view);
ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "rotationX", 0, 270, 0);
animator.setDuration(2000);
animator.start();
等同于如下:
TextView tv = (TextView)findViewById(R.id.text_view);
ObjectAnimator animator = new ObjectAnimator();
animator.setTarget(tv);
animator.setPropertyName("rotationX");
animator.setFloatValues(0, 180, 0);
animator.setDuration(2000);
animator.start();