动画和图形——View Animation

来源:互联网 发布:温湿度监测软件 编辑:程序博客网 时间:2024/06/07 21:58

我们使用view animation系统表示view视图的补间动画。补间动画计算动画信息,比如开始点,结束点,大小,旋转度和其他与动画相关的信息。

一个补间动画可以表示一个View对象内容的一系列简单的变化(位置,大小,旋转和透明)。所以,如果有一个TextView对象,我们可以移动,旋转,伸缩这个text。如果有背景图片,背景图片可以随着text一起变化。animation包提供了补间动画使用的所有类。

一系列animation命令,不管是XML还是代码定义了补间动画。像定义一个layout,推荐使用XML文件定义view animation。因为这样比硬编码可读性和可复用性更强。在下面的例子中,使用了XML。更多关于硬编码的方法,参考AnimationSet类和Animation子类。

animation说明定义了我们想要的变化,变化的时间,持续时间。变化可以是连续性的,同时的——例如,可以使一个textView从左向右移动,然后旋转180度,也可以是移动和旋转同时进行。每一次变化需要为其指定一系列参数(为尺寸变化指定开始尺寸,结束尺寸,为旋转指定开始角度和结束角度等),同时还需要指定其他的通用参数(比如开始时间和持续时长)。为了使多个变化同时进行,需要指定相同的开始时间;要使它们依次进行,需要计算开始时间加上先前变化的持续时间。

animation XML文件保存在res/anim/文件夹中,这个文件必须有一个根元素:它们可以是<alpha>,<scale>,<translate>,<rotate>插值元素或者包括一组这些元素的<set>标签(也可以包含在另一个<set>标签里)。缺省状态下,所有的animation命令同时开始,要使它们一次进行,需要指定startOffset属性,如下例所示。

下面的这个XML文件取自ApiDemos,它的作用是伸展,然后同时旋转一个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>

屏幕坐标轴的原点是屏幕的左上角顶点,并且往下和往右为正向。

pivotX值表示对于对象自己或父控件的相对性。“50”表示相对于父控件50%,"50%"表示相对自己50%。

插值器同前一篇中所讲的插值器内容。

下面的代码段告诉我们如何使用保存在res/anim/文件夹中的hyperspace_jump.xml。

ImageView spaceshipImage = (ImageView)findViewById(R.id.spaceshipImage);Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);spaceshipImage.startAnimation(hyperspaceJumpAnimation);

我们可以用Animation.setStartTime()指定一个开始时间然后再使用View.setAnimation()把该animation分配给View对象。

更多XML相关语法,查看Animation Resources.

Note:不管如何移动或改变视图大小,包含这个动画的View对象的边界不会自动变化来适应它。即便如此,动画仍可以绘制在视图的边界外而不会切断。而超过父控件时将会被切断。


原创粉丝点击