首页 > 代码库 > 原文翻译 Android_Develop_API Guides_Animation Resources(动画资源)

原文翻译 Android_Develop_API Guides_Animation Resources(动画资源)

 

英文原文:http://developer.android.com/guide/topics/resources/animation-resource.html#Property


一个动画资源可以使用如下两种动画类型的一种来定义:
Property Animation
    通过 Animator 获得到的一系列的时间集来改变一个对象的属性值创建的动画。
View Animation
    通过视图动画框架,这里有两种类型的动画你可以定义。
    ·Tween animation(补间动画) : 通过Animation在一张图片上执行一系列的变化来创建动画。
    ·Frame animation (帧动画):通过AnimationDrawable 展示一系列有顺序的图片来创建动画。

补间动画(Property Animation)
通过修改目标对象的属性值,使用XML定义的动画,例如一个背景色或者透明度的值,通过一系列的时间。

文件位置:
    res/animator/filename.xml
    这个文件名将被作为资源ID使用。
编译后的资源数据类型:
    资源类型指向 ValueAnimator, ObjectAnimator, 或者 AnimatorSet 的其中之一。
资源引用:
    Java中:R.animator.filename
    XML中:@[package:]animator/filename
语法:

<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"]/>    <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"]/>    <set>        ...    </set></set>


文件必须有一个单独的根元素,<set>, <objectAnimator>, 或 <valueAnimator> 其中之一。你可以将动画元素组织在一起并放置于<set>元素中,这还包括其他的<set>元素(也就是说,<set>可以包含<set>元素)。

元素:
    <set>
        一个包含其他动画元素(<objectAnimator>,<valueAnimator>或其他的<set>元素)的容器,代表一个 AnimatorSet。        你可以进一步的组织动画通过指定的嵌套<set>。每一个<set>元素可以定义它自己的 ordering 属性。
        
        属性:

        android:ordering
            关键字,指定位于该set下的动画的播放顺序。
            值            描述
            sequentially        顺序的播放该set下定义的动画
            together(默认)    同时播放该set下定义的动画
    <objectAnimator>
        在一个指定的时间内动态变化对象指定的属性,代表一个 ObjectAnimator 。
        属性:

        android:propertyName
            字符,必须的。代表要被动画化的对象属性,指向对象属性的名字。例如,你可以为一个视图对象指定为"alpha"或"backgroundColor"。<objectAnimator>元素没有暴露给我们一个 target 属性,因此,你不能在XML描述中设置要执行动画的对象。你必须通过调用 loadAnimator() 来加载你的动画XML资源,然后调用 setTarget() 来设置包含这个属性的目标对象。

        android:valueTo
            浮点型,数值型或颜色值,必须的。代表动画结束时的属性值。颜色则用一个六位数的16进制数字来表示。(例如,#333333)

        android:valueFrom
            浮点型,数值型或颜色值。代表动画开始时的属性值。如果没有指定,则动画的其实值通过调用对象属性的get方法来获取。颜色则用一个六位数的16进制数字来表示。(例如,#333333)

        android:duration
            数值型。动画的时间,用毫秒表示。默认为300毫秒。

        android:startOffset
            数值型。调用start() 后延迟执行动画的毫秒数。

        android:repeatConunt
            数值型。重复执行动画的次数。设置一个正数,或者设置为"-1"来无限循环重复下去。例如,"1"值意味着在最初始的动画运行结束后再重复一次,所以该动画总共执行了两次。默认值为"0",意味着将不会重复执行(只执行一次)。

        android:repeatMode
            数值型。代表在动画结束时,该动画的行为。android:repeatCount 必须被设置为一个整数值或"-1"来使得该属性起到它应有的作用。设置为"reverse"使得每次迭代都让动画反转方向,或者设置为"repeat‘来使得动画的每次循环都从开头开始。

        android:valueType
            关键字。如果属性值是一个颜色那么不要指定这个属性。系统的动画框架会自动处理颜色值。
            值            描述
            intType        指定动画属性的值为整数型
            floatType(默认)    指定动画属性的值为浮点型

    <animator>
        在一个指定的时间内动态变化对象指定的属性,代表一个 ValueAnimator 。
        属性:

        同<objectAnimator>相同。

示例:
    XML文件被保存在 res/animator/property_animator.xml
   

  <set android:ordering="sequentially">            <set>                <objectAnimator                android:propertyName="x"                android:duration="500"                android:valueTo="400"                android:valueType="intType"/>                <objectAnimator            android:propertyName="y"                android:duration="500"                android:valueTo="300"                android:valueType="intType"/>           </set>            <objectAnimator                android:propertyName="alpha"                android:duration="500"                android:valueTo="1f"/>    </set>


    为了运行这个动画,你必须在你的代码中将这个XML资源加载为一个 AnimatorSet 对象,然后在启动这个动画集之前先为所有的动画设置目标对象。通过方便的调用setTarget() 为AnimatorSet 的所有子集设置一个单一的目标对象。下面的代码展示如何做:
    AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.anim.property_animator);
    set.setTarget(myObject);
    set.start();

同样可以查看这里了解更多:
    ·Property Animation
    ·API Demos 这里举例说明了如何使用属性动画。

视图动画(View Animation)
视图动画框架提供了补间动画和帧动画两种动画,都可以定义在XML中。下面的章节描述了如何使用它们的方法。

补间动画(Tween animation)
定义于XML中,在图片上执行诸如旋转,渐变,移动和拉伸的转变。

文件位置:
    res/anim/filename.xml
    这个文件名将被作为资源ID使用。
编译后的资源数据类型:
    资源类型指向 Animation.。
资源引用:
    Java中:R.anim.filename
    XML中:@[package:]anim/filename
语法:

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@[package:]anim/interpolator_resource"    android:shareInterpolator=["true" | "false"] >    <alpha        android:fromAlpha="float"        android:toAlpha="float" />    <scale        android:fromXScale="float"        android:toXScale="float"        android:fromYScale="float"        android:toYScale="float"        android:pivotX="float"        android:pivotY="float" />    <translate        android:fromXDelta="float"        android:toXDelta="float"        android:fromYDelta="float"        android:toYDelta="float" />    <rotate        android:fromDegrees="float"        android:toDegrees="float"        android:pivotX="float"        android:pivotY="float" />    <set>        ...    </set></set>


文件必须有一个单独的根元素:<alpha>,<scale>,<translate>,<rotate> 或是<set>元素,<set>元素可以包括一组(或多组)其他的动画元素(甚至嵌套<set>元素)。

元素:
    <set>
        可以包含其他动画元素的容器 (<alpha>, <scale>, <translate>, <rotate>) 或其他的 <set> 元素. 代表一个 AnimationSet.
        属性:
        android:interpolator
        插值器资源。 应用到这个动画的插值器(Interpolator).。该属性的值必须被指向一个特定的代表插值器的XML资源(而不是一个插值器类的名字).。系统提供了默认的插值器资源或者你可以创建自己的插值器资源,查看下面关于插值器(Interpolators)的更多描述。

        android:shareInterpolator
        布尔值. "true",如果你想在所有的子元素中共享插值器。
    <alpha>
    一个淡入或是淡出的动画。代表一个AlphaAnimation。
        属性:
        android:fromAlpha
            浮点型。起始的透明度偏移量,0.0 代表全透明,1.0 代表完全不透明。
        android:toAlpha
            浮点型。 结束的透明度偏移量,0.0 代表全透明,1.0 代表完全不透明。

        获取更多 <alpha> 所支持的属性,看 Animation 类(所有的XML属性都继承自该类)。
    <scale>
    可重新计算大小的动画,你可以通过指定的pivotX和pivotY属性来为图片的放大(或是缩小)指定一个中心点。例如,如果值为0,0(左上角),那所有的变化将向下和向右进行。代表一个ScaleAnimation。
        属性:
        android:fromXScale
            浮点型. 起始X轴偏移量,1.0代表无变化。
        android:toXScale
            浮点型. 结束X轴偏移量,1.0代表无变化。
        android:fromYScale
            浮点型. 起始Y轴偏移量,1.0代表无变化。
        android:toYScale
            浮点型. 结束Y轴偏移量,1.0代表无变化。
        android:pivotX
            浮点型. 当缩放时保持位置不变的X轴位置。
        android:pivotY
            浮点型. 当缩放时保持位置不变的Y轴位置。
        获取更多<scale>所支持的属性,看 Animation 类(所有的XML属性都继承自该类)。
    <translate>
    一种垂直或者水平的移动。下面的所有属性都支持以下三种格式的属性:1) 值从-100到100,以 % 结尾,指示相对于控件自身的一个百分比值;2) 值从-100到100,以 %p 结尾,指示相对于其父控件的一个百分比;3) 一个不带后缀的浮点数,指示一个相对值。代表一个 TranslateAnimation类。
        属性:
        android:fromXDelta
            浮点或者百分比。起始X轴的偏移量。代表:相对于正常位置的像素距离(比如"5");相对于控件宽度的百分比值(比如"5%");现对于父控件宽度的百分比值(比如"5%p")。
        android:toXDelta
            浮点或者百分比。结束X轴的偏移量。代表:相对于正常位置的像素距离(比如"5");相对于控件宽度的百分比值(比如"5%");现对于父控件宽度的百分比值(比如"5%p")。
        android:fromYDelta
            浮点或者百分比。起始Y轴的偏移量。代表:相对于正常位置的像素距离(比如"5");相对于控件宽度的百分比值(比如"5%");现对于父控件宽度的百分比值(比如"5%p")。
        android:toYDelta
            浮点或者百分比。结束Y轴的偏移量。代表:相对于正常位置的像素距离(比如"5");相对于控件宽度的百分比值(比如"5%");现对于父控件宽度的百分比值(比如"5%p")。
        获取更多 <translate>所支持的属性,看 Animation 类(所有的XML属性都继承自该类)。
    <rotate>
    一个旋转动画,代表 RotateAnimation类。
    属性:
        android:fromDegrees
            浮点型。起始角度。
        android:toDegrees
            浮点数。结束角度。
        android:pivotX
            浮点或者百分比。旋转中心点的X轴位置。代表:相对于正常位置的像素距离(比如"5");相对于控件宽度的百分比值(比如"5%");现对于父控件宽度的百分比值(比如"5%p")。
        android:pivotY
            浮点或者百分比。旋转中心点的Y轴位置。代表:相对于正常位置的像素距离(比如"5");相对于控件宽度的百分比值(比如"5%");现对于父控件宽度的百分比值(比如"5%p")。
        获取更多 <rotate>所支持的属性,看 Animation 类(所有的XML属性都继承自该类)。
例子:
XML文件被保存在 res/anim/hyperspace_jump.xml:

<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>


下面这代代码演示如何将这个动画(上面的XML文件所定义的)应用给 ImageView 并启动它:
ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
还可以看这里:
    •    2D Graphics: Tween Animation

插值器
插值器是定义在XML中,影响着一个动画的变化率的一个动画调节器。这允许你现有的动画可以具有加速、减速、重复、回弹等效果。
插值器通过在一个动画元素中定义android:interpolator属性来应用,属性值指向插值器资源。
所有在Android中可用的插值器都是Interpolator的子类。每个插值器类,Android包含了一个你可以引用的公共的资源,以便可以通过android:interpolator属性将其应用给一个动画,下面的表格指定了每个插值器类的资源:
插值器类(Interpolator class)                                 资源ID(Resource 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

附:更多关于插值器的中文介绍请百度:android interpolator 插值器 详情。
下面展示了如何通过android:interpolator属性使用上面列出的所有插值器中的某一个:

<set android:interpolator="@android:anim/accelerate_interpolator">    ...</set>


自定义插值器(Custom interpolators)
如果你不满意上面所列出的由系统给你提供的插值器。你可以通过修改属性来创建一个自定义的插值器资源。例如,你可以调节 AnticipateInterpolator的加速速率,或者调整CycleInterpolator的周期数。为了做到这一点,你必须在XML文件中创建一个你自己的插值器资源。
文件位置:
res/anim/filename.xml
文件名将被用作资源ID。
编译资源数据类型:
资源指向相应的插值器对象。
资源引用:
在XML中: @[package:]anim/filename
语法:

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


如果你没有应用任何属性,那么你的插值器的功能将于上面所列出的由系统提供的完全一样。
元素:
请注意,每个 Interpolator 的实现类,当在XML中定义时,都以小写开头。

    <accelerateDecelerateInterpolator>
    变化:开始和结束时较慢,中间时结束。
    没有属性。
    <accelerateInterpolator>
    变化:开始时较慢,然后渐渐加速。
    属性:
    android:factor
    浮点型。加速速率(默认为1)。

    <anticipateInterpolator>
    变化:开始时反向然后甩回去。
    属性:
    android:tension
        浮点型。张力的力度值(默认为2)。

    <anticipateOvershootInterpolator>
    变化:开始的时候向后然后向前甩一定值后返回最后的值。
    属性:
    android:tension
        浮点型。张力的力度值(默认为2)。
    android:extraTension
        浮点型。用来与tension相乘的张力值(默认为1.5)。

    <bounceInterpolator>
    变化:动画结束的时候回弹。
    没有属性。
    <cycleInterpolator>
    变化:动画重复特定的次数,速率变化沿着正玄曲线。
    属性:
    android:cycles
        整数型。重复的次数(默认为1)。

    <decelerateInterpolator>
    变化:开始时加速,然后慢。
    属性:
    android:factor
        浮点型。减速速率(默认为1)。

    <linearInterpolator>
    变化:以常量速率变化。
    没有属性。
    <overshootInterpolator>
    变化:向前甩出一定值之后再回到原来位置。
    属性:
    android:tension
        浮点型。张力的力度值(默认为2)。

例子:
XML文件被保存在 res/anim/my_overshoot_interpolator.xml:

<?xml version="1.0" encoding="utf-8"?><overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"    android:tension="7.0" />


下面的这个动画XML文件将应用这个插值器:

<scale xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@anim/my_overshoot_interpolator"    android:fromXScale="1.0"    android:toXScale="3.0"    android:fromYScale="1.0"    android:toYScale="3.0"    android:pivotX="50%"    android:pivotY="50%"    android:duration="700" />


帧动画(Frame animation)
使用XML定义的由一系列图片顺序播放的动画(就像电影一样)。
文件位置:
res/drawable/filename.xml
文件名称将被用作资源ID:
编译资源数据类型:
指向 AnimationDrawable 的资源。
资源引用:
在 Java中:R.drawable.filename
在 XML中:@[package:]drawable.filename
语法:

<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"    android:oneshot=["true" | "false"] >    <item        android:drawable="@[package:]drawable/drawable_resource_name"        android:duration="integer" /></animation-list>


元素:
    <animation-list>
    必须的。必须为根元素。包含一个或更多的<item>元素。
    属性:
    android:oneshot
        布尔值。.true:如果你想让动画只执行一次。false:如果想让动画循环。

    <item>
    动画的一帧。必须是<animation-list>元素的子元素。
    属性:
    android:drawable
    图片资源。被用于这一帧的图片。
    android:duration
    整数型。用来展示这一帧的时间,毫秒。
例子:
XML文件被保存在 res/anim/rocket.xml:

<?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 = (AnimationDrawable) rocketImage.getBackground();rocketAnimation.start();

 


更多信息看:
    •    2D Graphics: Frame Animation

 
 
 

原文翻译 Android_Develop_API Guides_Animation Resources(动画资源)