animation和animator的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了animation和animator的区别相关的知识,希望对你有一定的参考价值。

参考技术A 该文不从实现或者绘画原理里区别animation和animator,主要是从特点,使用方法和形式来区别。

简单来说,比起animation,animator能更精确得控制动画。

propertyValuesHolder:实现用法不一样而已,效果一样。所以不加研究。用到再做记录

animation主要用于tween动画。

animator主要用于属性动画。

Android资源文件夹anim和animator文件夹的区别

主要区别

在这里插入图片描述
Android资源文件夹anim和animator都是放置动画相关的xml文件。这里简要说明一下,Android中动画分为属性动画和视图动画两大类,其中视图动画又分帧动画和补间动画。对于动画资源文件,官方动画也有详细说明,本文归纳总结思路更清晰。文件夹anim和animator其中主要区别在于:

  • anim文件夹:放置补间动画相关的xml,有补间属性控制xml和自定义插值器两种xml文件
  • animator文件夹:放置属性动画xml
  • drawable文件夹:帧动画xml

anim文件夹下的补间控制xml

res/anim/my_animation.xml

​ 首先,文件必须具有一个根元素,可以是 <alpha><scale><translate><rotate> 或包含一组(或多组)其他动画元素(甚至是嵌套的 <set> 元素)的 <set> 元素。模板demo如下

    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false">
        <scale
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:fromXScale="1.0"
            android:toXScale="1.4"
            android:fromYScale="1.0"
            android:toYScale="0.6"
            android:pivotX="50%"
            android:pivotY="50%"
            android:fillAfter="false"
            android:duration="700" />
        <set
            android:interpolator="@android:anim/accelerate_interpolator"
            android:startOffset="700">
            <scale
                android:fromXScale="1.4"
                android:toXScale="0.0"
                android:fromYScale="0.6"
                android:toYScale="0.0"
                android:pivotX="50%"
                android:pivotY="50%"
                android:duration="400" />
            <rotate
                android:fromDegrees="0"
                android:toDegrees="-45"
                android:toYScale="0.0"
                android:pivotX="50%"
                android:pivotY="50%"
                android:duration="400" />
        </set>
    </set>  

使用补间动画

ImageView image = (ImageView) findViewById(R.id.image);
Animation myAnimation = AnimationUtils.loadAnimation(this, R.anim.my_animation);
image.startAnimation(myAnimation);

anim文件夹下的插值器xml

res/anim/my_interpolator.xml`

插值器是在 XML 中定义的动画修改器,它会影响动画的变化率。插值器可对现有的动画效果执行加速、减速、重复、退回等。插值器通过 android:interpolator 属性应用于动画元素,该属性的值是对插值器资源的引用。Android 中提供的所有插值器都是 Interpolator 类的子类。为便于您使用 android:interpolator 属性将插值器应用于动画,Android 针对每个插值器类包含了一个可供您引用的公共资源。下表指定了每个插值器要使用的资源:

插值器类资源 ID
AccelerateDecelerateInterpolator@android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator@android:anim/accelerate_interpolator
AnticipateInterpolator@android:anim/anticipate_interpolator
AnticipateOvershootInterpolator@android:anim/anticipate_overshoot_interpolator
BounceInterpolator@android:anim/bounce_interpolator
CycleInterpolator@android:anim/cycle_interpolator
DecelerateInterpolator@android:anim/decelerate_interpolator
LinearInterpolator@android:anim/linear_interpolator
OvershootInterpolator@android:anim/overshoot_interpolator

如果您对平台提供的插值器(在上表中列出)不满意,则可以使用修改过的属性创建自定义插值器资源。例如,您可以调整 AnticipateInterpolator 的加速率或调整 CycleInterpolator 的循环次数。为此,您需要在 XML 文件中创建自己的插值器资源。

<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
        android:attribute_name="value"
        />

InterpolatorName 为官方提供的插值器中的一个,主要对插值器修改为你想要的值即可。

drawable文件夹下的帧动画xml

res/drawable/filename.xml

在 XML 中定义的按顺序显示一系列图片的动画(如电影)。指向 AnimationDrawable 的资源指针。

语法demo

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false">
        <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
        <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
        <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
    </animation-list>

使用

    ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
    rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

    rocketAnimation = rocketImage.getBackground();
    if (rocketAnimation instanceof Animatable) {
        ((Animatable)rocketAnimation).start();
    }

animator文件夹下的属性动画xml

res/animator/property_animator.xml

属性动画,在 XML 中定义的动画,用于在设定的一段时间内修改目标对象的属性。指向 ValueAnimatorObjectAnimatorAnimatorSet 的资源指针。该文件必须具有一个根元素,可以是 <set><objectAnimator><valueAnimator>。您可以将动画元素(包括其他 <set> 元素)组合到 <set> 元素中。语法如下:

    <set
      android:ordering=["together" | "sequentially"]>

        <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" | "pathType"]/>

        <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" | "pathType"]/>

        <set>
            ...
        </set>
    </set>
    

这里注意AnimatedVectorDrawable的使用中,我么知道valueType中新加了valueType类型pathType

使用demo

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,R.animator.property_animator);
set.setTarget(myObject);
set.start();

总结

animanimator文件夹的区别主要是根据动画类别来区分的,其中anim主要放置补间动画相关的xml(补间属性、插值器),animator放置属性动画相关的内容。另外,在drawable文件夹下放置逐帧动画的xml。这些就是主要区别。

以上是关于animation和animator的区别的主要内容,如果未能解决你的问题,请参考以下文章

android之animator 和animation 的区别

u3d里animator,animation有啥区别 吗

Android资源文件夹anim和animator文件夹的区别

unity3d里面Animation和Animator的区别

animation和transition得区别

Animation & Property Animation 使用