Android ObjectAnimator如何识别属性setter方法?

时间:2015-02-07 10:12:31

标签: java android android-animation objectanimator

如果将属性setX指定为字符串,ObjectAnimator如何调用适当的方法x?我的意思是,使用什么技术来识别我想要为我的视图的属性rotation制作动画并调用该视图的相应方法setRotation

我已经理解了ObjectAnimator如何工作并设法使用它,它很简单,我只是对操作原理感到好奇。

1 个答案:

答案 0 :(得分:8)

有许多方法可以为视图的旋转设置动画:

1。 ObjectAnimator.ofFloat(view, "rotation", 0f, 90f).start();

这使用reflection来调用视图的setRotation(float f)float getRotation()方法。

只要该类已为该属性实现了适当的getter和setter方法,就可以使用此方法为类的任何属性设置动画。

但是反射是一个缓慢的操作,所以有第二种方法不使用反射。

2。 ObjectAnimator.ofFloat(view, View.ROTATION, 0f, 90f).start();

这使用视图的rotation属性。 Property是一个抽象类,它定义setValue(T)T get()方法,这些方法又调用所提供对象的实际getter和setter。例如,View类上的rotation属性使用以下代码:

public static final Property<View, Float> ROTATION = new FloatProperty<View>("rotation") {
    @Override
    public void setValue(View object, float value) {
        object.setRotation(value);
    }

    @Override
    public Float get(View object) {
        return object.getRotation();
    }
};

如果要为对象的自定义属性设置动画,可以像上面那样实现自己的属性。

然后还有第三种方法,它也没有使用反射。

3。 view.animate().rotation(90f);

这个界面流畅,使用起来更方便。您还可以将多个动画链接在一起运行,例如:view.animate().rotation(90f).translationX(10f);

此方法的缺点是,您只能为View的标准属性设置动画,而不能在自己的类上设置自定义属性或属性。