Android开发者指南-View 动画-View Animation[原创译文]

Animation:

View Animation

英文原文:http://developer.android.com/guide/topics/graphics/view-animation.html

版本:Android 4.0 r1

译者注:黄色底色为未决译文

你可以用 view 动画系统在 View 上完成 Tween 动画。Tween 动画根据起点、终点、大小、旋转等信息来计算并显示动画。

Tween 动画可以让 View 中的对象完成一系列简单的变化效果(位置、大小、旋转、透明度)。因此,假设其中有一个 TextView 对象,则你可以平移、旋转、放大、缩小这些文本。如果它带有背景图片,则此图片也会随文本一起变化。 animation package 提供了 Tween 动画用到的全部类。

Tween 动画的一系列指令由 XML 或 Android 代码来定义。与定义 layout 类似,推荐使用 XML 来定义,因为可读性、复用性、互通性会比硬编码要好一些。 以下例子中,我们使用 XML。(要了解用程序代码来定义动画的有关内容,请参考 AnimationSet 类和 Animation 子类)

动画指令定义了你需要的变化效果、变化时机和持续时间。动画效果可以是串行或并行的——比如,你可以让 TextView 中的文本先从左向右移动,然后旋转180度,也可以让文字一遍移动一边旋转。 每个效果包含一组特定参数(初始大小和结束大小、旋转的起始角度和结束角度等等),以及一组通用参数(比如启动时间和持续时间)。 要实现多个效果的同时显示,只要把它们的启动时间设为同一时间即可;而要串行显示的话,需要把起始时间加上前一个效果的持续时间。

定义动画的 XML 文件位于 Android 项目的 res/anim/ 目录下。 此文件必须包含一个唯一的 root 元素:可以是一个 <alpha><scale><translate><rotate>、interpolator 元素、或包含了几组上述元素的<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 表示一开始变化较慢,然后加速。每种 Interpolator 都包含了可在 XML 内设置的属性值。

以下代码把动画应用于 layout 中的 ImageView 对象,用到了存放于项目 res/anim/ 中的hyperspace_jump.xml

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 语法的详情、支持的标记和属性,请参阅 Animation Resources

注意: 无论动画是移动还是缩放,容纳动画的 View 的边界都不会自行调整。动画显示仍将超出其 View 的边界,并不会截断。 不过,如果动画超过了父 View 的边界,将会截断显示。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值