首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

【Android API指南】卡通片和图像(2) - 视图动画

2012-08-30 
【Android API指南】动画和图像(2) - 视图动画你可以使用视图动画系统执行视图的补间动画。补间动画使用起点,

【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),然后往下和玩右是增长。
pivotX可以指定为相对对象自己或者相对于父视图("50"表示相对于父视图的50%,"50%"是相对于自己的50%)。
你还可以指定一个插入器。android提供了一些插入器的子类。例如AccelerateInterpolator指定一个加速动画。
对应上面的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);
你也可以选择使用Animation.setStartTime()来定义开始时间,使用View.setAnimation()来指定使用的动画。
提示:不管是移动位置还是改变大小,视图的范围不会自适应。所以,视图会被绘制超过它的范围,而不被截取。不过,如果动画超过了父视图的范围就会被截取。

热点排行