Android视图动画---View Animation

来源:互联网 发布:2016年气象数据 编辑:程序博客网 时间:2024/05/14 18:48

本文译自:http://developer.android.com/guide/topics/graphics/view-animation.html

你能够使用视图动画系统来执行View对象上的补间动画。补间动画是用诸如开始点、结束点、尺寸、旋转以及一些其他的动画特性来计算的动画。

补间动画能够在View对象的内容上执行一个简单的变换系列(位置、尺寸、旋转和透明度)。因此,如果有一个TextView对象,就能够移动、旋转、放大或缩小文本。如果该TextView对象有一个背景图片,那么这个背景图片会跟文本一起变换。animation包提供了补间动画中所使用的所有的类。

动画指令序列定义了补间动画,这些指令既可以用XML来定义,也可以用Android代码来定义。跟布局定义一样,推荐使用XML来定义动画,因为它更加可读、可重用、并且比应编码的动画更加可插拔。在下面的例子中,我们使用XML。(要学习更多的有关在应用程序代码中定义动画的知识,请阅读AnimationSet类和其他的Animation子类。)

动画指令定义了你想要的动画变换,以及动画发生的时机和动画的播放的时长。动画变换能够是顺序的或并发的,例如:有一个从左向右移动的TextView对象的内容,然后旋转180度,或者在文本移动的同时旋转。每种变换都需要一组参数来指定所要的变换(针对尺寸变换的开始尺寸和结束尺寸、针对旋转的开始角度和结束角度等等),以及一组共同的参数(例如,开始时间和持续时长)。如果要是让几种变换同时发生,就要给它们设置相同的开始时间;如果要让它们顺序播放,就要用开始时间加上前面动画变换的时长来计算下一个动画播放的开始时间。

动画XML文件要定义在你的Android工程的res/anim/目录中。这个文件必须要有一个单独的根元素:这个元素既可以是一个单独的<alpha>、<scal>、<translate>、<rotate>的插值元素,也可以是拥有这些元素(包括<set>元素)组合的<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%)。

通过分配一个Interpolator对象,能够决定如何随着时间的推移来进行一个动画的变换。Android包括了几种Interpolator子类,它们能够指定各种速度的曲线,例如: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);

作为startAnimation()方法的一个替代方法,你能够用Animation.setStartTime()方法来定义动画的开始时间,然后用View.setAnimation()方法把这个动画对象分配给View对象。

关于XML语法、可用的标签和属性的更多信息,请看“动画资源”(http://developer.android.com/guide/topics/resources/animation-resource.html)

 

注意:不管你的动画如何移动或调整尺寸,拥有动画的View对象的边界都不会自动的调整来适应变化,即使动画超出了View对象的边界也不会被裁剪,但是如果动画超出了它的父容器的的边界,那么它将会被裁剪。

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 家长管的太严怎么办 对于老公沉迷于股票怎么办 月经期吃了香瓜怎么办 月经漏到内裤上怎么办 上班没时间养狗怎么办 宝宝呼吸道感染反复发烧怎么办 熬夜后头晕想吐怎么办 生气后全身无力酸痛怎么办? 久坐导致的腰疼怎么办 削土豆手变黑了怎么办 熬夜后头痛眼痛怎么办 孩子毎天通宵游戏怎么办 熬夜写作业困了怎么办 三十多岁白头发越来越多怎么办 AI界面字体太小怎么办 睡不着怎么办躺倒床上脑子混乱 作息规律不正常夜里睡不着怎么办 作息不规律引起身体痒怎么办 在大学里好无聊怎么办 开会时间通知错了怎么办 商场要求商户变更位置怎么办 怀孕初期症状小腹痛怎么办 1岁半宝宝吃夜奶怎么办 戒奶宝宝不喝奶粉怎么办 2岁半宝宝老晚睡怎么办 老是熬夜然后想调生物钟怎么办 一个月宝宝睡眠不好怎么办 个人怎么办一清pos机 社保到退休年龄未交满15年怎么办 退休时社保没交满15时怎么办 单位不支付病假工资怎么办 一年级学生上课注意力不集中怎么办 一年级学生的理解能力差怎么办 一年级学生学习太差怎么办 宝宝屁眼破皮怎么办啊 九个月婴儿不爱喝奶怎么办 十一个月婴儿发烧怎么办 四个月宝宝睡不踏实怎么办 5个月宝宝瘦了怎么办 宝宝只吃迷糊奶怎么办 宝宝五个月了不吃奶粉怎么办