View Animation(视图动画)
原文:Android Developers——View Animation
视图动画
你可以利用视图动画系统为你的View制作补间动画,即根据起点、终点、尺寸变化、旋转角度等条件计算出的动画。
补间动画可以在你的View上添加许多效果(位移、缩放、旋转、透明度变化等)。比如说,如果你有一个TextView对象,你可以移动、旋转、缩放它,如果它有背景图,那么背景图也会跟着变化。animation包提供了制作补间动画可能用到的所有类。
补间动画是由XML文件中或是代码中的一系列的动画指令定义的。我们推荐使用XML文件,因为它的可读性、复用性、易修改性比代码更强,和我们推荐使用布局文件来设计UI同样道理。下面的例子中,我们使用了XML。如果想知道如何在代码中定义,可以参考AnimationSet类以及其他Animation的子类。
动画指令定义了我们想要发生的变化、变化发生的时间以及变化会持续多久。这些变化可以是同时发生的,也可以是按照顺序发生的。例如,你可以让一个TextView的内容从左边移动到右边,然后旋转180度,也可以让平移和旋转同时发生。每种变化都有一系列的参数(旋转角度、初始位置与终点位置等),也有一些参数是所有变化共用的(开始时间、持续时间等)。如果想要动画同时发生,那么就将开始时间设置为同一个时间点,如果想要动画按顺序发生,那么就根据动画的持续时间计算出每个动画的开始时间。
视图动画文件应当被放在你的Android工程的res/anim/文件夹中。文件必须有一个单独的根标签,可以是<alpha>,<scale>,<rotate>,<translate>,一个插值器(intepolator),也可以是一个<set>。所有动画默认是同时的,如果要它们按次序,必须设置startOffset属性。
下面的动画让一个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%)。
你可以通过Intepolator来确定动画的变化趋势。Android系统提供了许多的Interpolator子类,例如AccelerateInterpolator,它让变化在开始时慢并且逐渐加速。每个Intepolator都有一个可以在XML中使用的属性值。
假设我们有一个储存在res/anim文件夹下的,名为hyperspace_jump.xml的动画文件,我们可以这么在代码中使用:
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
关于视图动画的更多信息:https://developer.android.google.cn/guide/topics/resources/animation-resource.html#View