java - Android ObjectAnimator 如何识别属性设置方法?

标签 java android android-animation objectanimator

如果属性 x 被指定为字符串,ObjectAnimator 如何能够调用适当的方法 setX?我的意思是,使用什么技术来识别我想要为 View 的属性 rotation 设置动画并调用该 View 的适当方法 setRotation

我已经了解了ObjectAnimator的工作原理并成功地使用了它,它很简单,我只是对它的运行原理感到好奇。

最佳答案

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

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

这使用 reflection调用 View 的 setRotation(float f)float getRotation() 方法。

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

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

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

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

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 的标准属性进行动画处理,而不能对自定义属性或您自己的类的属性进行动画处理。

关于java - Android ObjectAnimator 如何识别属性设置方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28380891/

相关文章:

java - 使用 Java Access Bridge 实现自动化

java - Android 开发...应用程序结构新手

android - ProgressDrawable 图层列表的图像应该是什么样的?

android - 如何在 Android 中为其他 ImageView 后面的 ImageView 设置动画

java - FileInputStream 逐字节或 block 读取?

java - 整数除法 : How do you produce a double?

android - 在 Android 中构建 Webkit

android - 淡入淡出动画闪烁 - Android

android - Viewpager 选项卡中的动画更改淡入/淡出,就像 Linkedin 介绍屏幕一样

java - 关于 JDBC 连接