Fra*_*sco 3 java android android-animation objectanimator
setX如果将属性x指定为字符串,ObjectAnimator如何调用适当的方法?我的意思是,用什么技术来识别我想要为rotation我的视图的属性设置动画并调用该视图的适当方法setRotation?
我已经了解了ObjectAnimator如何工作并设法使用它,它非常简单,我只是对操作原理感到好奇.
有许多方法可以为视图的旋转设置动画:
1. ObjectAnimator.ofFloat(view, "rotation", 0f, 90f).start();
这使用反射来调用视图的方法setRotation(float f)和float getRotation()方法.
只要该类已为该属性实现了适当的getter和setter方法,就可以使用此方法为类的任何属性设置动画.
但是反射是一个缓慢的操作,所以有第二种方法不使用反射.
2. ObjectAnimator.ofFloat(view, View.ROTATION, 0f, 90f).start();
这使用视图的rotation属性.属性是一个抽象类,它定义了调用所提供对象的实际getter和setter setValue(T)的T get()方法和方法.例如,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();
}
};
Run Code Online (Sandbox Code Playgroud)
如果要为对象的自定义属性设置动画,可以像上面那样实现自己的属性.
然后是第三种方法,它也不使用反射.
3. view.animate().rotation(90f);
这个具有流畅的界面,因此更容易使用.您还可以将多个动画链接在一起运行,例如:view.animate().rotation(90f).translationX(10f);
此方法的缺点是,您只能为View的标准属性设置动画,而不能在自己的类上设置自定义属性或属性.
| 归档时间: |
|
| 查看次数: |
2601 次 |
| 最近记录: |