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

文章目录

      • 主要区别
      • anim文件夹下的补间控制xml
      • anim文件夹下的插值器xml
      • drawable文件夹下的帧动画xml
      • animator文件夹下的属性动画xml
      • 总结

主要区别

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

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

anim文件夹下的补间控制xml

res/anim/my_animation.xml

​ 首先,文件必须具有一个根元素,可以是 或包含一组(或多组)其他动画元素(甚至是嵌套的 元素)的 元素。模板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 文件中创建自己的插值器资源。


<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
        android:attribute_name="value"
        />

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

drawable文件夹下的帧动画xml

res/drawable/filename.xml

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

语法demo

    
    <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>
            ...
        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。这些就是主要区别。

你可能感兴趣的:(Android动画专栏,Android自定义控件,android,java)