-
动画速率的控制:Interpolator(指定动画变化的量)
-
使用插值器:
- 在xml文件中引用插值器
- 通过setInterpolator()函数设置插值器
-
AccelerateDecelerateInterpolator是加速减速插值器,表示在开始与结束的地方速率改变比较慢,在中间的时候加速,先加速后减速
TranslateAnimation translateAnimationInter = (TranslateAnimation)
AnimationUtils.loadAnimation(ScaleActivity.this, R.anim.translateinter);
//先快后慢
translateAnimationInter.setInterpolator(new AccelerateDecelerateInterpolator());
textView.startAnimation(translateAnimationInter);
- AccelerateInterpolator是加速插值器,在动画开始的地方速率改变比较慢,然后开始加速,然后突然停止
//加速突然停止
translateAnimationInter.setInterpolator(new AccelerateInterpolator());
textView.startAnimation(translateAnimationInter);
- DecelerateInterpolator是减速插值器,载动画开始的时候加速到最大值,之后减速
//减速插值器
translateAnimationInter.setInterpolator(new DecelerateInterpolator());
textView.startAnimation(translateAnimationInter);
- LinearInterpolator是匀速插值器,也称匀速加速器
匀速插值器translateAnimationInter.setInterpolator(new LinearInterpolator());
textView.startAnimation(translateAnimationInter);
- BounceInterpolator是弹跳插值器,模拟了控件自由落地后回弹效果
//弹跳插值器
translateAnimationInter.setInterpolator(new BounceInterpolator());
textView.startAnimation(translateAnimationInter);
- AnticipateInterpolator是初始偏移插值器,表示在开始的时候向反方向进行动画一部分之后,在反回来
- 除了普通的构造函数,还有一个参数为张力的构造函数
- public AnticipateInterpolator(float tension),张力值默认为2,越大初始的偏移量就越大,而且速度越快
//反向初始插值器
translateAnimationInter.setInterpolator(new AnticipateInterpolator(4));
textView.startAnimation(translateAnimationInter);
- OvershootInterpolator是结束偏移插值器,表示载动画结束时,沿着动画方向继续运动一段距离后再结束动画
- 同理它也有和上述反向插值器类似的构造函数
//前向结束插值器
translateAnimationInter.setInterpolator(new OvershootInterpolator());
textView.startAnimation(translateAnimationInter);
- 有了上述两个的插值器的铺垫,如果有一个两者兼具的是不是更好:
- AnticipateOvershootInterpolator就是这个插值器,开始向反方向一段距离,结束向后一段距离
- 除了上面类似的构造函数外还有一个
- public AnticipateOversshootInterpolator(flaot tension, float extraTension),最后一个参数就是额外张力值,默认为1.5
- AnticipateOvershootInterpolator就是这个插值器,开始向反方向一段距离,结束向后一段距离
//上述两者结合
translateAnimationInter.setInterpolator(new
AnticipateOvershootInterpolator(2,2));
textView.startAnimation(translateAnimationInter);
- CycleInterpolator是循环插值器,表示动画循环播放特定的次数,速率沿着正弦曲线改变,循环过后动画最终会回到初始位置(即使设置fillAfter=“true"也不会影响),中间的动画进度会按照正弦曲线变化
//循环插值器
translateAnimationInter.setInterpolator(new CycleInterpolator(1));
textView.startAnimation(translateAnimationInter);