Android动画4-Interpolator常用模式

来源:互联网 发布:手机淘宝中评可以改吗 编辑:程序博客网 时间:2024/06/06 04:46
插值器通过 对动画执行的每个时间点进行 提前/延迟 来达到对动画效果的 加速/减速,通过设置不同的 曲线 来得出负时间/大于1的时间值,使控件按设定的动画轨迹 反方向/正方向 超出改变一点轨迹
     这里只介绍 官方提供的9中插值器,即已有的Interpolator的9个子类。当使用插值器的时候只要创建这几个类的对象,然后调用anim.setInterpolator方法就已经把该插值器添加到动画里了。
     9个子类:   AccelerateDecelerateInterpolator  加速减速插值器-开始与结束时速度慢,中间速度快
                        AccelerateInterpolator  加速插值器-开始速度慢,然后一直变快
                        DecelerateInterpolator 减速插值器-开始速度快,然后一直变慢
                        AnticipateInterpolator  向前插值器-先向反方向运动一定距离,然后正方向运动到终点
                        AnticipateOvershootInterpolator  向前向后插值器-先反方向运动一定距离,然后正方向运动到超出一定距离,然后返回终点
                        OvershootInterpolator 向后插值器-到轨迹终点之后再正方向运动一定距离,然后返回终点
                        BounceInterpolator  反弹插值器-类似于一物体从高度掉到地上,会弹起来几下
                        CycleInterpolator   循环插值器-类型于正弦曲线那样来回运动
                        LinearInterpolator  线性插值器-正常速度,默认就是
        详细说明:  (注:所有插值器是对时间进行处理,动画的移动轨迹是没有变化的)
            上面已经说了插值器其实是通过对 绘制时间 进行修改(提前/延迟)来达到速度变化的效果(其实是错觉,速度没有变化,只是时间变了),在各个插值器类里面都会有一个方法,输入正常时间输出计算过后的时间。
            例如:加速插值器
            ,这个方法会对输入的时间进行处理,这个方法结果是input的平方(当创建该插值器时传入的参数是1的时候,走if为true),即本来总时间的0.1位置该绘制的图像变成了0.01时要绘制的图像,0.9位置应绘制的图像变成了0.81位置绘制的图像,以此类推。这样就会看到速度“越来越快”。
            故以下曲线Y轴代表输出时间,X轴代表输入时间, 只需要关注 X轴 [0,1] 的这一段,曲线图转自http://blog.csdn.net/wzg_1987/article/details/8989686
            1. AccelerateDecelerateInterpolator  先加速后减速
            
                        类似  正弦曲线 -π/2 到 π/2 段。
                        构造方法:无参构造,计算时间的方法:
            2. AccelerateInterpolator     一直加速
            
                        类似 正弦曲线 -π/2 到 π/2 段。
                        构造方法:

                        传入一个float类型值,,由这两个方法可看出,传入的值越大,初始斜率就越小,即初始速度越小。
            3. DecelerateInterpolator    一直减速
            
            类似  正弦曲线 0 到 π/2 段。
            构造方法: 和加速插值器刚好相反
  
                     
            传入的值越大,初始速度越快。  还有个无参构造,无参构造代表mFactor=1f   
            4. AnticipateInterpolator    向前插补器
               
            这是一个3次的曲线,[0,1]中有一些点Y轴为负值,即代表先反方向运动
            构造方法:1.无参构造,代表 mTension=2f;    2.一个float类型的参数
,传入的值越大,刚开始反方向的距离越长,但是注意这里反方向运动距离是计算出来的,不是由传入值 直接指定的。
            5. AnticipateOvershootInterpolator 向前向后插值器
               
            [0, 0.5]向前插补,[0.5, 1]向后插补
            构造方法:
            
            
            
            计算时间的方法:
            
            反方向运动和正方向运动的距离是相同的。传入的值越大,反方向/正方向移动的距离越长。
            6. OvershootInterpolator 向后插值器
                
            [0,1]有一部分Y轴值超出1,这部分就是正向超出部分
            构造方法:
            
            
            计算时间的方法:
            
            传入的值越大,超出距离越长。
            7. BounceInterpolator  反弹插值器
            构造方法:无参构造
            计算时间的方法:
            
            8. CycleInterpolator   循环插值器
            构造方法:
            
            计算时间的方法:
            
            由源码可看出,此曲线就是正弦曲线,很明显传入的值控制着整个曲线的X轴长度,传入5代表曲线最大长度是10π。
            9. LinearInterpolator  线性插值器
            构造方法: 无参构造
            计算时间的方法:
            
            这就是 正常速度。

0 0
原创粉丝点击