本篇只记录TranslateAnimation。
Translate动画是非常好理解,就是定义一个开始的位置和一个结束位置,定义移动时间,然后就能自动产生移动动画。
代码方式实现:
TranslateAnimation tAnim = new TranslateAnimation(0, 400, 0, 0); // 横向位移
tAnim.setDuration(2000);
view.startAnimation(tAnim);
xml实现方式:
1. 新建/res/anim文件夹,
2. 在anim下新建动画xml文件
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXDelta="-100%p"
android:toXDelta="0%"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="10000">
</translate>
该文件只能有一个根结点,可以是<set>,<alpha>,<scale>,<translate>,<rotate>,而其中,<set>结点可以包含子节点,即可以包含<set>,<alpha>,<scale>,<translate>,<rotate>,以此类推。
fromXDelta: "50" 表示使用绝对位置定位; “50%” 表示使用相对控件本身定位; "100%p" 表示相对于控件的父控件定位,例如100%p是父控件的底部,0%p是父控件的顶部。有意思的是,如果使用了android:layout_centerInParent="true", android:layout_gravity="center"等,0%p和100%p的位置也会相应变动。
toXDelta等的取值也是一样。可以取负值。
Interpolator:决定动画进行过程的速度变化。比如:你将一个按钮从屏幕左侧运动到屏幕右侧。可以让它一直加速前进,或者先减速然后减速,这就是Interpolator发挥的作用。
andoird:fillAfter: View Animation的动画效果是绘制出来的,并非该组件真正移动了,通过设置fillAfter为true,则动画将保持结束的状态。
startOffset:该属性定义动画推迟多久开始,通过这个属性的设置,我们可以设计一些前后按序发生的动画,当然,除了最后一个发生的动画,其他动画得设置fillAfter为true.
我们一般使用AnimationUtils读取定义在xml文件中的动画:
Animation anim = AnimationUtils.loadAnimation(AnimaXmlActivity.this, R.anim.myanim);
view.startAnimation(anim);
android:interpolator: 加速器,非常有用的属性,可以简单理解为动画的速度,可以是越来越快,也可以是越来越慢,或者是先快后忙,或者是均匀的速度等等,对于值如下:
@android:anim/accelerate_interpolator: 越来越快
@android:anim/decelerate_interpolator:越来越慢
@android:anim/accelerate_decelerate_interpolator:先快后慢
@android:anim/anticipate_interpolator: 先后退一小步然后向前加速
@android:anim/overshoot_interpolator:快速到达终点超出一小步然后回到终点
@android:anim/anticipate_overshoot_interpolator:到达终点超出一小步然后回到终点
@android:anim/bounce_interpolator:到达终点产生弹球效果,弹几下回到终点
@android:anim/linear_interpolator:均匀速度。