当前位置:操作系统 > 安卓/Android >>

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();

 

摘自 FireOfStar的专栏
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,