Android资源文件夹anim和animator都是放置动画相关的xml文件。这里简要说明一下,Android中动画分为属性动画和视图动画两大类,其中视图动画又分帧动画和补间动画。对于动画资源文件,官方动画也有详细说明,本文归纳总结思路更清晰。文件夹anim和animator其中主要区别在于:
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);
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 为官方提供的插值器中的一个,主要对插值器修改为你想要的值即可。
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();
}
res/animator/property_animator.xml
属性动画,在 XML 中定义的动画,用于在设定的一段时间内修改目标对象的属性。指向 ValueAnimator
、ObjectAnimator
或 AnimatorSet
的资源指针。该文件必须具有一个根元素,可以是
、
或
。您可以将动画元素(包括其他
元素)组合到
元素中。语法如下:
<set>
...
set>
set>
这里注意AnimatedVectorDrawable的使用中,我么知道valueType中新加了valueType类型pathType
使用demo
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,R.animator.property_animator);
set.setTarget(myObject);
set.start();
anim
和animator
文件夹的区别主要是根据动画类别来区分的,其中anim
主要放置补间动画相关的xml(补间属性、插值器),animator
放置属性动画相关的内容。另外,在drawable
文件夹下放置逐帧动画的xml。这些就是主要区别。