2017-04-06 67 views
1

我在android系统开始学习动画,阅读https://developer.android.com/guide/topics/resources/animation-resource.html<objectAnimator>和ValueAnimator又名<animator>之间的区别?

发现有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"]/> 

谁能解释的差异以及何时使用什么? 任何答复和评论表示赞赏。

回答

8

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”,这不适用于animator标签。

而且从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> 
0

<objectAnimator>标签可用于动画项目的单个属性,如alpha(可见性),位置X或位置Y(不能同时在一起)。 和<animator>标记可用于更改任何您想要的属性,只是时间的定义。它提供了一个简单的计时引擎,用于运行计算动画值并将它们设置在目标对象上的动画

+0

越来越迷茫与“定时引擎”和计算“动画值”。 –

+0

其他人能否以更好的方式回答这个问题? –

相关问题