API指南 -- 动画和图像(3)-- 组件动画(View Animation)
来源:互联网 发布:复杂网络基础 编辑:程序博客网 时间:2024/06/05 20:49
你可以使用组件动画系统在View上设置补间动画。补间动画通过动画的起点,终点,尺寸,旋转以及其它信息来计算动画。
一个补间动画可以在一个View对象的内容(位置,大小,旋转,透明度)上执行一些简单的变换操作。所以,如果你有一个TextView对象,那么你可以移动,旋转,放大,或缩小文本。如果它还有背景图片的话,背景图片也会跟着文本一起变换。android.view.animation包下提供了补间动画所用到的所有类。
通过使用XML文件或者安卓编码,你可以定义一系列补间动画指令。与定义布局文件类似,推荐在XML文件中定义动画,因为与硬编码相比,它更宜读,宜用,宜交换。在下面的例子中,我们使用了XML。(如果想学习如何在代码中定义动画,请参考AnimationSet类和其它Animation类)。
动画指令定义了你想执行的变换操作,它们发生的时间,以及时长。变换可以是顺序的或者是同时的 ---- 比如,你可以让一个TextView的内容从左移到右,然后再旋转180度,或者你可以让移动和旋转同时进行。每种变换都需要设置特定的参数(大小变换的起始大小,终止大小,旋转的起始角度和终止角度等等),还有一些普通的参数(比如,开始时间和时长)。为了让变换同时进行,你可以给它们一个相同的开始时间;为了让它们顺序进行,计算开始时间时加上前一个动画的时长。
动画XML文件放在目录res/anim下面。这个文件只能含有一个根元素:可以是一个<alpha>,<scale>,<translate>,<rotate>,interpolator元素,或者<set>元素,用来包含其它元素的组合(当然也可以包含另一个<set>)。默认情况下,所有动画同时开始。为了让它们顺序进行,你可以如下所示,给它们指定一个startOffset属性。
下面的XML文件用来拉伸一个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%)。
你可以指定一个Interpolator,来决定如何随着时间来变换对象。安卓包含了几个Interpolator子类来指定不同的速度变换:比如,AccelerateInterpolator意味着变换开始时慢,然后加速。每一个Interpolator都可以在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对象。
注意:无论你的动画如果移动或缩放,动画作用的View对象的边界是不会改变的。虽然如此,动画仍然可以View的边界之外描画,而且不会发生裁剪。但是,如果动画越出了父对象的边界的话,裁剪就会发生。
- API指南 -- 动画和图像(3)-- 组件动画(View Animation)
- API指南 -- 动画和图像(2)-- 属性动画(Property Animation)
- 【Android API指南】动画和图像(3) - 图片动画
- 【Android API指南】动画和图像概述
- API指南--动画和图像—概述
- 【Android API指南】动画和图像(1) - 属性动画
- 【Android API指南】动画和图像(2) - 视图动画
- android动画之帧动画(drawable animation)和补间动画(view animation)
- Android组件Activity中的View绘画和动画(Animation)是否会重画?
- 视图动画(View Animation)
- Animation参考(View动画)
- View Animation(视图动画)
- 【Android API指南】动画和图像(5) - OpenGL
- 【Android API指南】动画和图像(6) - 硬件加速
- Android开发者指南-View 动画-View Animation[原创译文]
- android动画 -- view Animation
- Android:View Animation 动画
- 动画和图形——View Animation
- GitHub学习必看
- IT技术贴
- 什么是I帧,P帧,B帧
- 清理bin-log日志(mysql-bin日志清理)
- 蔚蓝的天空
- API指南 -- 动画和图像(3)-- 组件动画(View Animation)
- 求一元二次方程
- 如何在服务器上添加使用密钥登录的用户
- uva - 11987(正解待查)
- 每天一个JavaScript实例-操作元素定位元素
- 手机丢失后,马上做以下6件事
- android代码网站
- Sundy嵌入式底层开发课程笔记3 --磁盘管理常用命令 .
- vim7.4的python相关配置