我开始在android中学习动画,阅读https://developer.android.com/guide/topics/resources/animation-resource.html
发现xml和ValueAnimator又有两个元素
前者用于动画对象的属性,但与链接页面提供的定义混淆。这是:
"在指定的时间内执行动画。代表ValueAnimator"
这两个标签具有相同的属性:
<objectAnimator
android:propertyName="string"
android:duration="int"
android:valueFrom="float | int | color"
android:valueTo="float | int | color"
android:startOffset="int"
android:repeatCount="int"
android:repeatMode=["repeat" | "reverse"]
android:valueType=["intType" | "floatType"]/>
<animator
android:duration="int"
android:valueFrom="float | int | color"
android:valueTo="float | int | color"
android:startOffset="int"
android:repeatCount="int"
android:repeatMode=["repeat" | "reverse"]
android:valueType=["intType" | "floatType"]/>
任何人都可以解释差异以及何时使用什么? 任何答案和评论都表示赞赏。
答案 0 :(得分:14)
ObjectAnimator是ValueAnimator的子类。 主要区别在于,在ValueAnimator的情况下,您必须覆盖onAnimationUpdate(...)方法,您将在其中指定应用动画值的位置:
ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
view.setAlpha((Float) animation.getAnimatedValue());
}
});
animator.start();
ObjectAnimator将自行解决这个问题:
ObjectAnimator.ofFloat(view, View.ALPHA, 0, 1).start();
如果XML注意objectAnimator的“propertyName”,那么动画标签就不存在了。
同样从API 23开始,您还可以同时为多个属性设置动画:
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:repeatCount="1"
android:repeatMode="reverse">
<propertyValuesHolder android:propertyName="x" android:valueTo="400"/>
<propertyValuesHolder android:propertyName="y" android:valueTo="200"/>
</objectAnimator>
和/或自定义动画帧:
<animator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:repeatCount="1"
android:repeatMode="reverse">
<propertyValuesHolder>
<keyframe android:fraction="0" android:value="1"/>
<keyframe android:fraction=".2" android:value=".4"/>
<keyframe android:fraction="1" android:value="0"/>
</propertyValuesHolder>
</animator>