【Android API指南】动画和图像(2) - 视图动画
2012-08-22 20:30
260 查看
你可以使用视图动画系统执行视图的补间动画。补间动画使用起点,终点,尺寸,旋转,和一些自定义值去计算动画。
一个补间动画可以执行一些简单视图对象转换(位置,大小,旋转,透明度),所以,如果你有一个TextView对象,你可以移动它,旋转它,放大或者缩小它。如果TextView有一个背景图像的话,也会跟着文本发生改变。animation packate提供了所有补间动画类。
一系列的动画指令定义了补间动画,可以用XML或者Android代码实现。推荐使用XML,因为它更加易读,可重复使用,可交换。下面的例子我们使用XML实现。
动画指令定义了你想实现的动画,动画可以是连续的,也可以是同时发生的,例如,你可以移动一个TextView从左边到右边,然后旋转180度,或者你可以一边移动一边旋转。每个动画都有一个指定参数(开始大小和结束大小,开始角度和结束角度,等),已经一些通用参数(开始时间和持续时间)。要实现动画同时改变,需要给定相同的开始时间,顺序播放的话,需要计算开始加上先前动画的持续时间。
动画的XML文件存放在res/anim/目录中,文件必须有一个单独的更元素:可以是<alpha>, <scale>, <translate>, <rotate>, 内插元素,或者是一个包含其他元素的<set>元素组。默认情况下所有的动画都是同时开始的。为了实现顺序动画,你需要设置startOffset属性。
下面XML文件来自APIDemo,实现了先拉伸,然后同时缩小和旋转一个View对象的操作。
屏幕左上角的坐标是(0,0),然后往下和玩右是增长。
pivotX可以指定为相对对象自己或者相对于父视图("50"表示相对于父视图的50%,"50%"是相对于自己的50%)。
你还可以指定一个插入器。android提供了一些插入器的子类。例如AccelerateInterpolator指定一个加速动画。
对应上面的XML,我们保持在res/anim/目录中,命名为hyperspace_jump.xml,下面的代码引用它操作一个ImageView对象。
你也可以选择使用Animation.setStartTime()来定义开始时间,使用View.setAnimation()来指定使用的动画。
提示:不管是移动位置还是改变大小,视图的范围不会自适应。所以,视图会被绘制超过它的范围,而不被截取。不过,如果动画超过了父视图的范围就会被截取。
一个补间动画可以执行一些简单视图对象转换(位置,大小,旋转,透明度),所以,如果你有一个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()来指定使用的动画。
提示:不管是移动位置还是改变大小,视图的范围不会自适应。所以,视图会被绘制超过它的范围,而不被截取。不过,如果动画超过了父视图的范围就会被截取。
相关文章推荐
- 【Android API指南】动画和图像(5) - OpenGL
- 【Android API指南】动画和图像(4) - 画布和绘图资源
- 【Android API指南】动画和图像概述
- 【Android API指南】动画和图像(1) - 属性动画
- 【Android API指南】动画和图像(6) - 硬件加速
- 【Android API指南】动画和图像(3) - 图片动画
- 翻译:iOS视图控制器编程指南(十)——自定义过渡动画(Customizing the Transition Animations)
- Android API指南之动画与图形(1)——动画与图形概览
- API指南 -- 动画和图像(3)-- 组件动画(View Animation)
- Android API Guide for Animation and Graphics(三)—— 动画与图形(视图动画)
- Unity 用户手册 用户指南创建游戏旧动画系统动画视图指南
- API指南--动画和图像—概述
- 技术文章 | 前端图像处理指南
- 30种图像动画特效算法(C#多线程版)(下)
- 基于OpenCV的视频图像组态 (8) :随机线条动画效果
- iOS中动画的实现:以及视图的移动、缩放和旋转
- Silverlight & Blend动画设计系列九:动画(Animation)与视图状态管理(Visual State Manager)
- 1.TabActivity、视图树、动画
- 视图动画实现类的分工
- 【OpenCV入门指南】第四篇 图像的二值化