StupidBeauty
Read times:1623Posted at: - no title specified

安卓开发文档翻译:视图动画,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)的边界都不会自动更新以跟随动画。即 便如此,动画仍然能够 超出其边界 的范围内绘制,不会被裁剪。但是,如果动画超出 了其亲代视图的边界,则 会发生 裁剪。

Your opinions

Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands