Android自定义View(9) 《动画 插值器简介》
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android自定义View(9) 《动画 插值器简介》相关的知识,希望对你有一定的参考价值。
参考技术A 在android中,我们经常会需要去绘制一些自己需要的控件,所以继承自View的自定义View就产生了。这篇文章主要介绍动画中的一些常用的插值器。关于插值器的使用这里就不再叙述了,有需要可以查看 Android自定义View(5) 《自定义View,动画篇 视图动画》 。加速减速插值器,刚开始和结束的时候速度会比较慢,中间会加速
加速插值器,速度越来越快
减速插值器动画开始的时候速度加速到最大值,接着越来越慢
线性插值器,速率保持恒定
弹性插值器,模拟了控件来回弹跳的样子‘
初始偏移插值器,会在动画开始的时候先向前偏移然后再开始动画
结束偏移插值器,表示在结束时沿动画方向继续运动一段距离再结束动画
开始和结束均偏移,是AnticipateInterpolator和OvershootInterpolator的合体。
循环插值器,其构造函数
其实系统的插值器使用都是比较简单的,那么我们如何来自定义一个属于自己的插值器呢?首先我们来看一下LinearInterpolator的源码
在这里我们要注意有这个方法
这就是我们自定义插值器的关键了,我们需要实现Interpolator接口,并复写上述方法。该方法的input就是动画的执行进度,范围是0~1,根据动画的执行时间匀速输出,我们通过这个值来计算出动画实际的动画值,这个概念看过 Android自定义View(6) 《自定义View,动画篇 属性动画 ValueAnimator》 就可以理解了。线性插值器在这个方法中输出了input,也就是未做任何处理直接输出了,所以动画也就按0~1的进度匀速执行了。
接下来我们开始定义一个属于自己的简单的插值器,我们来直接实现动画的倒序播放
内容很简单,就是将原本0至1的输出结果,变为1至0,也就是倒序播放
接下来我们用之前的缩放例子来测试一下我们的插值器
这里我们可以看到我们原本设置的是从1缩放到0.5,实际的运行结果却是从0.5开始放大到1,所以使用了我们的插值器后成功实现了倒放,自定义的插值器成功了~
视图动画仅支持插值器的使用,但是这里我们再介绍一个Animator特有的Evaluator的用法,刚刚我们说了,自定义插值器其实就是将动画的进度在指定的时长内分成了0到1,用来表示动画执行的进度。在介绍Evaluator之前呢,我们再来看之前我们使用的ValueAnimator。
我们通过addUpdateListener来监听当前的动画值,而这个动画值与我们所设定的范围和动画的进度是有直接关系的,那么如何将我们的动画进度与具体的动画值联系到一起呢,这个时候就需要用到我们的Evaluator了。比如我们此时初始化了一个0f到500f的动画,那么我们可以自定义在0到1的动画进度内如何去返回具体的动画的值。
这里呢我们实现了最基础的线性变化的Evaluator,fraction也就是动画的进度,范围0到1,我们就在动画开始值的进度上加上跟随时间线性变化的值,所以我们在这里实现了和线性插值器一样的动画,注意TypeEvaluator的泛型要与你动画中的设定的值动画的类型一致,否则会出错。
下面我们再修改一下,把它变成瞬移,在动画执行到一半时直接放在动画结束的位置
当进度超过0.5时我们直接返回结束的动画值,否则就放在初始值不动
所以再次验证了我们的Evaluator生效啦
动画值的控制一方面可以利用插值器,另一方面Animator也可以使用Evaluator来实现各种插值器所完成的效果,所以在实际的开发中我们可以灵活运用~
以上是关于Android自定义View(9) 《动画 插值器简介》的主要内容,如果未能解决你的问题,请参考以下文章