【Android API指南】动画和图像(2) - 视图动画
你可以使用视图动画系统执行视图的补间动画。补间动画使用起点,终点,尺寸,旋转,和一些自定义值去计算动画。
一个补间动画可以执行一些简单视图对象转换(位置,大小,旋转,透明度),所以,如果你有一个TextView对象,你可以移动它,旋转它,放大或者缩小它。如果TextView有一个背景图像的话,也会跟着文本发生改变。animation packate提供了所有补间动画类。
一系列的动画指令定义了补间动画,可以用XML或者Android代码实现。推荐使用XML,因为它更加易读,可重复使用,可交换。下面的例子我们使用XML实现。
动画指令定义了你想实现的动画,动画可以是连续的,也可以是同时发生的,例如,你可以移动一个TextView从左边到右边,然后旋转180度,或者你可以一边移动一边旋转。每个动画都有一个指定参数(开始大小和结束大小,开始角度和结束角度,等),已经一些通用参数(开始时间和持续时间)。要实现动画同时改变,需要给定相同的开始时间,顺序播放的话,需要计算开始加上先前动画的持续时间。
动画的XML文件存放在res/anim/目录中,文件必须有一个单独的更元素:可以是<alpha>, <scale>, <translate>, <rotate>, 内插元素,或者是一个包含其他元素的<set>元素组。默认情况下所有的动画都是同时开始的。为了实现顺序动画,你需要设置startOffset属性。
下面XML文件来自APIDemo,实现了先拉伸,然后同时缩小和旋转一个View对象的操作。
<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),然后往下和玩右是增长。
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);spaceshipImage.startAnimation(hyperspaceJumpAnimation);你也可以选择使用Animation.setStartTime()来定义开始时间,使用View.setAnimation()来指定使用的动画。