Animations
Android支持2种类型的动画。内插动画可以应用于旋转、平移、放缩和渐变;frame-by-frame动画用来显示一系列的图片。关于创建、使用和应用动画的广泛概述可以在11章找到。
把动画定义成外部资源,有利于在多个地方使用,并且能基于设备硬件或方向选择适应的动画。
Tweened Animations
每个内插动画以独立的XML文件存储在/res/anim文件夹下。和layouts和drawable资源一样,动画XML的文件名用作资源的标识。
每个动画可以用来定义以下的变化:alpha(渐变)、scale(放缩)、translate(平移)和ratate(旋转)。
每个类型的动画都有特性来定义内插序列如何作用:
Alpha fromAlpha/toAlpha 0-1
Scale fromXScale/toXScale 0-1
fromYScale/toYScale 0-1
pivotX/pivotY 图像的宽度/高度的百分比字符串 0%-100%
Translate fromX/toX 0-1
fromY/toY 0-1
Rotate fromDegrees/toDegrees 0-360
pivotX/pivotY 图像的宽度/高度的百分比字符串 0%-100%
你可以使用<set/>标签来创建多个动画。一个动画集包含一个到多个动画变化,并且支持一些额外的标签和特性来定制动画集中的动画何时以及怎样运行。
接下来的列表给了一些set标签一些特性:
❑ duration 动画的持续时间(毫秒)
❑ startOffset 启动动画的延时(毫秒)
❑ fillBefore True表示在动画开始前应用动画变换
❑ fillAfter True表示动画开始后应用动画变换
❑ interpolator 设置整个时间范围如何影响动画的速度。在11章中会探讨这个变量。指定interpolator时需要引用系统的动画资源(android:anim/interpolatorName)。
如果你不使用startOffset标签,动画集中的动画将同步执行。
接下来的例子显示了动画集控制目标在缩小淡出的同时旋转360度:
<?xml version=”1.0” encoding=”utf-8”?> <set xmlns:android=”http://schemas.android.com/apk/res/android” android:interpolator=”@android:anim/accelerate_interpolator”> <rotate android:fromDegrees=”0” android:toDegrees=”360” android:pivotX=”50%” android:pivotY=”50%” android:startOffset=”500” android:duration=”1000” /> <scale android:fromXScale=”1.0” android:toXScale=”0.0” android:fromYScale=”1.0” android:toYScale=”0.0” android:pivotX=”50%” android:pivotY=”50%” android:startOffset=”500” android:duration=”500” /> <alpha android:fromAlpha=”1.0” android:toAlpha=”0.0” android:startOffset=”500” android:duration=”500” /> </set>
Frame-by-Frame Animations
Frame-by-Frame动画用于View的背景上,显示一系列的图片,每张图片显示指定的时间。
因为Frame-by-Frame动画显示drawables,所以,它们也被放在/res/drawble文件夹下(和Tweened动画不同),并且使用它们的文件名作为它们的资源标识。
接下来的XML片段显示了一个简单的动画,它循环显示一些位图资源,每张位图显示0.5秒。为了能使用这个XML片段,你需要创建rocket1-rocket3 三个新的图片资源。
<animation-list xmlns:android=”http://schemas.android.com/apk/res/android” android:oneshot=”false”> <item android:drawable=”@drawable/rocket1” android:duration=”500” /> <item android:drawable=”@drawable/rocket2” android:duration=”500” /> <item android:drawable=”@drawable/rocket3” android:duration=”500” /> </animation-list>