动画资源
动画资源可以定义两种动画类型之一:
- 属性动画
-
通过在一段时间内用一个对象的属性值修改来创建一个动画
Animator
。 - 查看动画
-
视图动画框架可以使用两种类型的动画:
- 补间动画:通过用单个图像对单个图像执行一系列转换来创建动画
Animation
- 框架动画:或通过按顺序显示一系列图像来创建动画
AnimationDrawable
。
- 补间动画:通过用单个图像对单个图像执行一系列转换来创建动画
属性动画
在XML中定义的动画,可在一段时间内修改目标对象的属性,如背景颜色或Alpha值。
- 文件位置:
-
res/animator/filename.xml
文件名将被用作资源ID。 - 编译资源数据类型:
-
资源指针
ValueAnimator
,ObjectAnimator
或AnimatorSet
。 - 资源参考:
-
在Java中: 在XML中:
R.animator.filename
@[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>
元素。 - 内容:
- 例:
-
XML文件保存在
res/animator/property_animator.xml
:
<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>
I为了运行此动画,您必须将代码中的XML资源充满到AnimatorSet
对象中,然后在开始动画设置之前为所有动画设置目标对象。为方便起见,调用setTarget()
为所有孩子设置了一个目标对象AnimatorSet
。以下代码显示了如何执行此操作:
查看动画
视图动画框架支持补间和逐帧动画,它们都可以用XML声明。以下各节介绍如何使用这两种方法。吐温动画
用XML定义的动画,用于执行图形上的旋转,淡入淡出,移动和拉伸等过渡。
- 文件位置:
-
res/anim/filename.xml
文件名将被用作资源ID。 - 编译资源数据类型:
-
资源指针指向
Animation
。 - 资源参考:
-
在Java中: 在XML中:
R.anim.filename
@[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>
的元件)。 - 内容:
- 例:
-
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>
这个应用程序代码将动画应用到一个
ImageView image = ( ImageView ) findViewById ( R . id . image );ImageView
并开始动画:
Animation hyperspaceJump = AnimationUtils .loadAnimation
( this , R . anim . hyperspace_jump );
image .startAnimation
( hyperspaceJump ); - see also:
插值
插值器是一种用XML定义的动画修改器,它影响动画中的变化率。这可以让您现有的动画效果加速,减速,重复,反弹等。
插值器应用于具有android:interpolator
属性的动画元素,该属性的值是对插补器资源的引用。
Android中可用的所有插补器都是Interpolator
该类的子类。对于每个插值器类,Android包含一个公共资源,您可以引用它以便使用该android:interpolator
属性将插补器应用于动画。下表指定了用于每个插补器的资源:
插值器类 | 资源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
属性应用其中之一的方法:
定制插入器
如果您对平台提供的插补器(上表中列出)不满意,则可以创建具有修改属性的自定义插补器资源。例如,您可以调整加速度AnticipateInterpolator
,或调整加速度的周期数CycleInterpolator
。为此,您需要在XML文件中创建自己的插补器资源。
- 文件位置:
-
res/anim/filename.xml
文件名将被用作资源ID。 - 编译资源数据类型:
- 指向相应插补器对象的资源指针。
- 资源参考:
-
在XML中:
@[package:]anim/filename
- 句法:
-
<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" />
框架动画
XML中定义的动画,按顺序显示一系列图像(如电影)。
- 文件位置:
-
res/drawable/filename.xml
文件名将被用作资源ID。 - 编译资源数据类型:
-
资源指针指向
AnimationDrawable
。 - 资源参考:
-
在Java中: 在XML中:
R.drawable.filename
@[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>
- elements:
- example:
-
-
XML file saved at
res/drawable/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> - This application code will set the animation as the background for a View, then play the animation:
-
ImageView
rocketImage
=
(
ImageView
)
findViewById
(
R
.
id
.
rocket_image
);
rocketImage .setBackgroundResource
( R . drawable . rocket_thrust );
rocketAnimation = ( AnimationDrawable ) rocketImage .getBackground()
;
rocketAnimation .start()
;
-
XML file saved at
- see also: