动画和图形——View Animation

我们使用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对象的边界不会自动变化来适应它。即便如此,动画仍可以绘制在视图的边界外而不会切断。而超过父控件时将会被切断。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值