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 中定义的动画,用于在设定的一段时间内修改目标对象的属性。指向 ValueAnimator
、ObjectAnimator
或 AnimatorSet
的资源指针。该文件必须具有一个根元素,可以是 <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();
总结
anim
和animator
文件夹的区别主要是根据动画类别来区分的,其中anim
主要放置补间动画相关的xml(补间属性、插值器),animator
放置属性动画相关的内容。另外,在drawable
文件夹下放置逐帧动画的xml。这些就是主要区别。
以上是关于animation和animator的区别的主要内容,如果未能解决你的问题,请参考以下文章
android之animator 和animation 的区别
Android资源文件夹anim和animator文件夹的区别