Android应用资源---动画资源(Animation Resources)(三)

插补器

插补器是一个被定义在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属性:

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

 

定制插补器

如果对平台提供的插补器不满意(上表中列出的插补器),还可以编辑属性的方法来创建定制的插补器资源。如,能够调整AnticipateInterpolator插补器的加速频率,也能够调整CycleInterpolator插补器的周期数量。要达到这个目的,需要在一个XML文件中创建自己的插补器资源。

文件位置(FILE LOCATION):

   res/anim/filename.xml,文件名会作为资源的ID

被编译的资源类型(COMPILED RESOURCE DATATYPE

   资源指向相应的插补器对象

资源引用(RESOURCE REFERENCE):

   XML中:@[package:]anim/filename

语法(SYNTAX):

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

如果没有应用任何属性,那么这个定制的插补器会与平台提供的插补器具有完全相同的功能。

元素(ELEMENTS):

注意,每个插补器的实现,当在XML中定义时,都是用小写字母开头的。

<accelerateDecelerateInterpolator>

降低动画开始和结束时变化的频率,但在动画的中间部分加速。

没有属性

<accelerateInterpolator>

降低动画启动时变化的频率,然后开始加速

属性(ATTRIBUTES):

   android:factor

   浮点值,指定加速频率(默认是1)

<anticipateInterpolator>

动画启动时先向后,然后再向前变化(橡皮筋效果)。

属性(ATTRIBUTES):

android:tension

浮点值,指定拉力数(默认是2

<anticipateOvershootInterpolator>

动画启动时先向后,然后再向前,并飞过目标值,然后再终点稳定。

   属性(ATTRIBUTES):

   android:tension

   浮点值,指定拉力数(默认是2

   android:extraTension

   浮点值,指定拉力的倍数(默认是1.5

<bounceInterpolator>

在动画结尾的反弹效果。

没有属性

<cycleInterpolator>

用指定的循环数重复动画,变化频率是按照正弦模式进行。

   属性(ATTRIBUTES):

   android:cycles

   整数值,指定循环周期数(默认是1)。

<decelerateInterpolator>

动画启动时,快速跳出,然后减速。

   属性(ATTRIBUTES):

   android:factor

   浮点值,指定减速比率(默认是1

<linearInterpolator>

动画的变化频率是固定的。

没有属性。

<overshootInterpolator>

向前抛出,并飞过终点,然后再返回来。

   属性(ATTRIBUTES):

   android:tension

   浮点值,设定拉力数(默认是2

例子:

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

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

以下是这个动画XML使用的插补器:

<scalexmlns: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中动画,它会电影那样,按序播放图片。

文件位置(FILE LOCATION):

res/drawable/filename.xml

文件名被用作资源的ID

被编译资源类型(COMPILED RESOURCE DATATYPE):

资源指向一个AnimationDrawable对象

资源引用(RESOURCE REFERENCE

Java代码中:R.drawable.filename

XML中:@[package:]drawable.filename

语法(SYNTAX):

<?xml version="1.0" encoding="utf-8"?>
<animation-listxmlns: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):

<animation-list>

必须的,它必须是根元素。它要包含一个或多个<item>元素。

属性(ATTRIBUTES):

android:oneshot

布尔值,如果只想让动画执行一次,那么就设定为“true”,否则,设定为“false”来循环播放动画。

<item>

动画的一帧,必须是<animation-list>元素的子元素。

属性(ATTRIBUTES):

android:drawable

指定用于本帧动画的可描画资源。

android:duration

整数值,以毫秒为单位,显示本帧动画的持续时间。

例子:

XML文件被保存在res/anim/rocket.xml中:

<?xml version="1.0" encoding="utf-8"?>
<animation-listxmlns:android="http://schemas.android.com/apk/res/android"
   
android:oneshot="false">
   
<itemandroid:drawable="@drawable/rocket_thrust1"android:duration="200"/>
   
<itemandroid:drawable="@drawable/rocket_thrust2"android:duration="200"/>
   
<itemandroid:drawable="@drawable/rocket_thrust3"android:duration="200"/>
</animation-list>

应用程序代码会把这个动画设置为一个View对象的背景,然后播放动画:

ImageView rocketImage =(ImageView) findViewById(R.id.rocket_image);
rocketImage
.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation
=(AnimationDrawable) rocketImage.getBackground();
rocketAnimation
.start();

 

你可能感兴趣的:(android,xml,animation,resources,encoding,attributes)