Android API Guide for Animation and Graphics(三)—— 动画与图形(视图动画)

视图动画

你可以在View控件上使用视图动画实现补间动画。补间动画通过使用诸如起点,终点,大小,旋转角度来运行动画。

补间动画可以让View对象中的内容实现一系列简单的变换(变换位置、大小、旋转角度和透明度)。比如,你有一个TextView对象,你可以让它的文本移动,旋转,缩放。如果这个TextView有背景图片的话,它将随文本一起变换。animation package包提供了所有的补间动画的类。

补间动画可以通过xml或者代码来声明。如定义布局一样,补间动画更推荐使用xml资源文件来声明,因为它比硬编码的方式更易读,易复用,易改变。下面的例子我们使用xml来实现。

动画声明了你想实现的变换以及变换的时间。补间动画的变换可以有序或同时进行,比如,你可以让一个TextView的文本内容从左往右移动,然后再旋转180度或者边移动边旋转。每次变换都是跟随着特定设置的参数(如起始大小和结束大小的变化,起始角度和结束角度的变化等)以及一些常见的参数(如起始时间,动画的时长)来变化的。如要要实现补间动画的同时播放,需要给每个动画设置相同的开始时间;如果要有序的播放,就需要计算好每个动画的开始时间以及每个动画的播放时长。

xml文件的动画需要放在Android项目中的res/anim目录下。文件必须有指定的根节点:根节点可以是<alpha>,<scale>,<translate>,<ratate>,插值器节点或者包含前面所有节点的<set>节点。所有动画默认是同时进行的。为了让动画有序的执行,你必须如下面所示指定startOffset属性的值。

<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%)。

你可以通过分配一个Interpolator(插值器)来让动画的转变跟随着时间变化规律来转变。
Android包含了数种不同速度曲率的子类插值器,如加速插值器 AccelerateInterpolator让动画的变换缓慢开始然后加速。每种插值器都有对应的属性可以添加到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。

Note:不管动画如何移动或者调整大小,包含动画的View控件的边界都不会自动调整来容纳动画结束时的状态。即使如此,View也不会裁剪动画结束时超出边界所绘制的内容。但是,如果动画结束时所绘制的内容超过了View的父视图,则会出现裁剪。

原文链接:https://developer.android.google.cn/guide/topics/graphics/view-animation.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值