英文原文: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