Android ObjectAnimator如何工作?
如果ObjectAnimator如果将属性x
指定为字符串,它将如何调用相应的方法setX
。我的意思是,用什么技术来识别我想动画我视图的属性“旋转”并调用该视图的适当方法setRotation?Android ObjectAnimator如何工作?
我已经理解了ObjectAnimator如何工作并设法使用它,这很简单,我只是对操作原理感到好奇。
对不起,我的英语,我从来没有使用它:)
有多种方式以动画视图的旋转:
ObjectAnimator.ofFloat(view, "rotation", 0f, 90f).start();
这使用reflection到请致电setRotation(float f)
和float getRotation()
视图的方法。
只要该类为该属性实现了适当的getter和setter方法,就可以使用此方法为类的任何属性设置动画。
但反射是一个缓慢的操作,所以有第二种方法不使用反射。
2.ObjectAnimator.ofFloat(view, View.ROTATION, 0f, 90f).start();
这使用旋转属性的视图。 Property是一个抽象类,它定义了setValue(T)
和T get()
方法,该方法又调用提供对象的实际获取器和设置器。例如,在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();
}
};
如果要动画对象的自定义属性,你可以实现自己的财产像上面的。
然后有第三种方法,它也不使用反射。
view.animate().rotation(90f);
这其中有一个流畅的接口,所以它更容易使用。例如:您可以将多个动画链接在一起运行,例如:view.animate().rotation(90f).translationX(10f);
此方法的缺点是只能对视图的标准属性进行动画制作,而不能在您自己的类上设置自定义属性或属性。
呃,使用反射来生成动画Object声音太糟糕了,应该不可能! – Blablablabli 2017-02-22 09:24:14
对于属性“foo”,setFoo方法通过reflaction调用 – pskink 2015-02-07 10:32:33