在使用动画Animation或者AnimationSet的时候,有一个interpolator插补器的属性。可以使用这个属性来修饰动画运动的速率。比如加速、先加速再加速等。安卓api提供几个已经实现好的插补器:
AccelerateDecelerateInterpolator (效果)加速减速插补器(先慢后快再慢)
AccelerateInterpolator 加速插补器(先慢后快)
AnticipateInterpolator 向前插补器(先往回跑一点,再加速向前跑)
AnticipateOvershootInterpolator 向前向后插补器(先往回跑一点,再向后跑一点,再回到终点)
BounceInterpolator 反弹插补器(在动画结束的时候回弹几下,如果是竖直向下运动的话,就是玻璃球下掉弹几下的效果)
CycleInterpolator 循环插补器(按指定的路径以指定时间(或者是偏移量)的1/4、变速地执行一遍,再按指定的轨迹的相反反向走1/2的时间,再按指定的路径方向走完剩余的1/4的时间,最后回到原点。假如:默认是让a从原点往东跑100米。它会先往东跑100米,然后往西跑200米,再往东跑100米回到原点。可在代码中指定循环的次数)
DecelerateInterpolator 减速插补器(先快后慢)
LinearInterpolator 直线插补器(匀速)
OvershootInterpolator 超出插补器(向前跑直到越界一点后,再往回跑)
这些插补器的使用方法有二:
1.在资源文件的interpolator属性中指定
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:interpolator="@android:anim/overshoot_interpolator" android:fromXDelta="0" android:toXDelta="200%" android:duration="1000"/> </set>
也可以在set标签里面设置,对其全部子动画都生效。但如果在set标签里面设置了,子标签里面设置的interpolator将不会生效。
set标签里面还有一个shareInterpolator属性,false表示该插补器不对全部子动画生效,true反之,如果设置了interpolator,则默认为true
2.在java类里面设置
animation.setInterpolator(new AnticipateOvershootInterpolator());或者
animation.setInterpolator(getBaseContext(),android.R.anim.anticipate_overshoot_interpolator);
animation是一个Animation对象。
更多内容请关注本博客里系统插补器详解的相关内容。