安卓开发文档翻译:视图动画,View Animation
妳可以使用视图动画系统来对视图(Views)运行补间(tweened)动画。补间动画会使用以下信息来计算动画过程:起始点、终止点、尺寸、旋转以及与动画相关的其它一般属性。
补间动画会对一个视图对象的内容进行一系列的简单变换(位置 、尺寸、旋转和透明度 )。所以 ,如果妳有一个 文本视图 对象 的话,妳可以移动、旋转、放大或者缩小该文字。如果 它带有背景图片的话,则背景图片也会随着文字一起变换。 动画 包 中提供了在补间动画中需要用到的所有的类。
使用 一 个 动画指令序列来定义补间动画, 这种动画指令序列可以使用 XML 或安卓代码来定义。 与定义布局 的工作 类似, 我们建议妳使用 XML文件 来定义动画,因为,相对于硬编码的动画来说,它更可读 、更可重用 、更可替换。 在以下的示例中,我们使用的是 XML 。 (如果 妳想使用代码来定义动画,而不想使用 XML 的话,则参考 AnimationSet 类和其它的 Animation 子类。 )
动画指令中,定义了:妳想要进行的变换、什么时候进行变换以及变换过程要持续多久。多个变换可以按顺序进行或者同时进行——例如,妳可以让某个TextView的内容从左向右移动,然后再旋转 180度,也可以让该文字在移动的同时就进行旋转。每个变换,都需要一组与该类型的变换相关的参数(对于尺寸变换,就是起始尺寸和终止尺寸,对于旋转,就是起始角度和终止角度,等等),以及一组通用参数(例如,起始时间和持续时间)。要想让多个变换同时发生的话,则给它们指定相同的起始时间;要想让它们依次发生的话,则需要做点计算,在起始时间上加上前一个变换的持续时间。
动画 的 XML文件应当放置 在妳的安卓项目的 res/anim/ 目录中。 该文件必须具有一个单独的根元素: 可以是,单个 的 <alpha> 、 <scale> 、 <translate> 、 <rotate> 、插值元素 ,或者可以是 一个 <set> 元素 ,其中包含着一组单个元素 (也 可以包含另一个 <set> ) 。默认情况 下,所有的动画指令都是同时执行的。 要想让它们依次执行的话, 妳必须指定 startOffset 属性 , 如下面例子所示。
以下XML代码来自于应用编程接口示例项目集(ApiDemos)中的一个,它会对一个View 对象进行一些变换,首先拉伸它,然后同时让它自旋(spin)和旋转(rotate)。
<set 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/decelerate_interpolator" >
<scale
android:fromXScale = "1.4"
android:toXScale = "0.0"
android:fromYScale = "0.6"
android:toYScale = "0.0"
android:pivotX = "50%"
android:pivotY = "50%"
android:startOffset = "700"
android:duration = "400"
android:fillBefore = "false" />
<rotate
android:fromDegrees = "0"
android:toDegrees = "-45"
android:toYScale = "0.0"
android:pivotX = "50%"
android:pivotY = "50%"
android:startOffset = "700"
android:duration = "400" />
</set>
</set>
对于屏幕坐标(此示例中并未使用),左上角的坐标为(0,0),在向右和向下的方向上坐标值增大。
某些值,例如pivotX,可按照相对于对象本身或者相对于其亲代对象的值来指定。要确保使用了正确的格式("50"表示相对于亲代对象的50%,而"50%"表示相对于本身的50%)。
妳可以赋予一个 插值 器 ,以控制一个变换的速度是如何随时间而变化的。安卓自带 了多个插值器 子类 ,用来表示多种速度曲线 :例如, 加速插值 器 ,会使得一个变换 以慢速启动,然后加速。每个插值 器,都对应着一个可以应用到XML 文件中去的属性值。
将这个 XML文件保存 到项目的 res/anim/ 目录中,命名为 hyperspace_jump.xml ,然后 ,使用以下代码,可以引用到它,并且将它应用到布局中的某个 ImageView 对象上。
ImageView spaceshipImage = ( ImageView ) findViewById ( R . id . spaceshipImage );
Animation hyperspaceJumpAnimation = AnimationUtils . loadAnimation ( this , R . anim . hyperspace_jump );
spaceshipImage . startAnimation ( hyperspaceJumpAnimation );
除了使用 startAnimation() 之外 ,妳还可以这么做:使用 Animation.setStartTime() 来为该动画定义一个起始时间,然后 ,使用 View.setAnimation() 来将该动画赋予给该视图(View)。
欲知更多相关信息 ,例如 XML语法 、可用的标记及属性,则阅读 动画资源 。
注意 : 无论 妳的动画是如何移动或改变大小的,承担 了妳的这个动画的那个视图(View)的边界都不会自动更新以跟随动画。即 便如此,动画仍然能够 在 超出其边界 的范围内绘制,不会被裁剪。但是,如果动画超出 了其亲代视图的边界,则 会发生 裁剪。
HxLauncher: Launch Android applications by voice commands