插补器

插补器是一个被定义在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();

更多相关文章

  1. Android UI设计之自定义TextView属性,实现带边框效果的TextView
  2. Android 系统锁屏实现固件升级动画
  3. focusable ,focusableInTouchMode,控件焦点属性;Android 如何让Edit
  4. android android:exported属性的使用
  5. [置顶] 关于android:lineSpacingExtra属性 在android5.0与之前版
  6. Android 高级UI解密 (四) :花式玩转贝塞尔曲线(波浪、轨迹变换动画
  7. android 布局的动画
  8. Android -----listView的属性大全
  9. android 自定义dialog,窗口动画,

随机推荐

  1. 10个常见的 Android(安卓)新手误区
  2. Android(安卓)onTouchEvent, onClick及on
  3. 国内几大Android应用市场试用小记――开
  4. Android中我为什么发不了邮件--Android邮
  5. Android大赛首轮获奖作品解析。。。
  6. 高焕堂:iPhone软件是芝麻,巧用Android才能
  7. Android之应用资源的调用
  8. 想抢先体验Android操作系统的魅力吗?那就
  9. android中自定义Toast方法详解(一)
  10. Android开发前景展望