简介

  1. Interpolator:撺改者,校对机,分类机,插补器
  2. Interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等,这使得基本的动画得以实现加速、减速等效果。
  3. Interpolator 接口只有一个方法,即 getInterpolation (float input),该方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation
  4.  

系统定义的几个实现类

  1. Android 提供了几个 Interpolator 的实现类,实现了不同的速度曲线,如下:
    • AccelerateDecelerateInterpolator     在动画开始与结束的地方速率改变比较慢,在中间的时候加速【慢-快-慢】
    • AccelerateInterpolator     在动画开始的地方速率改变比较慢,然后开始加速【慢-快】(Accelerate 加速)
    • AnticipateInterpolator     开始的时候向后然后向前甩
    • AnticipateOvershootInterpolator    开始的时候向后然后向前甩一定值后返回最后的值
    • BounceInterpolator 动画结束的时候弹起
    • CycleInterpolator(float cycles)     动画循环播放特定的次数,速率改变沿着正弦曲线
    • DecelerateInterpolator     在动画开始的地方快然后慢【快-慢】(Decelerate,减速)
    • LinearInterpolator     动画以均匀的速率改变
    • OvershootInterpolator 向前甩一定值后再回到原来位置
  2. 相同的东西,另一种描述:
    • AccelerateInterpolator         加速,开始时慢中间加速
    • DecelerateInterpolator         减速,开始时快然后减速
    • AccelerateDecelerateInterolator    先加速后减速,开始结束时慢,中间加速
    • AnticipateInterpolator       反向 ,先向相反方向改变一段再加速播放
    • AnticipateOvershootInterpolator    反向加回弹,先向相反方向改变,再加速播放,会超出目的值然后缓慢移动至目的值
    • BounceInterpolator         跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能依次为8577708090100
    • CycleIinterpolator            循环,动画循环一定次数,值的改变为一正弦函数:Math.sin(2 * mCycles * Math.PI * input)
    • LinearInterpolator           线性,线性均匀改变
    • OvershottInterpolator        回弹,最后超出目的值然后缓慢改变到目的值
    • TimeInterpolator           一个接口,允许你自定义interpolator,以上几个都是实现了这个接口
  3. XML文件里有相应的几个可以设置的属性
  4.                
  5. 在代码中使用:animation.setInterpolator(new *Interpolator());
  6. 在布局中使用:android:interpolator="@android:anim/*_interpolator" 

  7. 注意:
    • 以上效果不能叠加,若先后设置了两个,则仅后面设置的效果有效。
    • Property Animation中的TimeInterplator,和View Animation中的Interplator,是一样的东西,在3.0之前只有Interplator3.0之后实现代码转移至了TimeInterplatorInterplator继承自TimeInterplator,内部没有任何其他代码。
  8. 如果android定义的interpolators不符合你的效果,也可以自定义interpolators,实现抛物线、自由落体等物理效果。
  9.  

系统定义的几个实现类的源码

  1. AccelerateInterpolator的源码:
  2.    mFactor = factor;//构造方法中出入的参数,默认为1
  3.    mDoubleFactor = 2 * mFactor; 
  4.     public float getInterpolation(float input) {
  5.         if (mFactor == 1.0f) {
  6.             return input * input;
  7.         } else {
  8.             return (float)Math.pow(input, mDoubleFactor);
  9.         }
  10.     }  
  11.     如果factor=1 则函数为x^2(默认),否则函数为x^a (a 是参数)
  12.     注意:下图表示的是位移-时间曲线,切线表示的是速度(并非加速度)
  13.     

  14. AccelerateDecelerateInterpolator的源码:
  15.      public float getInterpolation(float input) {
  16.         return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
  17.     }  
  18.     
  19.     
  20. 从图可以看到,先从0开始加速,中间值速度最大,之后开始减速,速度减到0时刚好到达结束位置。
  21.  

自定义Interpolator示例

  1. class MyInterpolator implements Interpolator {
  2.         private float mFactor;
  3.         private int i;
  4.         public MyInterpolator(int i) {//初始化时设定速率变化规则
  5.             this.= i;
  6.         }
  7.         @Override
  8.         public float getInterpolation(float input) {
  9.             //参数input是一个0.0f~1.0f的浮点数,Interpolator可认为是一个基于input构造出的函数
  10.             switch (i) {
  11.             case 2://“变化率”呈二次方
  12.                 mFactor = input * input;
  13.                 break;
  14.             case 3://“变化率”呈三次方
  15.                 mFactor = input * input * input;
  16.                 break;
  17.             default://“变化率”是匀速的
  18.                 mFactor = input;
  19.                 break;
  20.             }
  21.             return mFactor;
  22.         }
  23.     }
  24. }
  25.  

Interpolator 插值器的更多相关文章

  1. Interpolator(插值器)的种类

    Interpolator(插值器)的种类 Interpolator被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repeat ...

  2. [原][粒子特效][spark]插值器interpolator

    深入浅出spark粒子特效连接:https://www.cnblogs.com/lyggqm/p/9956344.html 插值器是体现粒子生命周期变化的功能 group使用到插值器的方式: 可以看到 ...

  3. android.animation(2) - ValueAnimator的 Interpolator 和 Evaluator

    一.插值器 插值器,也叫加速器:有关插值器的知识,我在<Animation动画详解(二)——Interpolator插值器>中专门讲过,大家可以先看看这篇文章中各个加速器的效果.这里再讲一 ...

  4. Android动画效果之Property Animation进阶(属性动画)

    前言: 前面初步认识了Android的Property Animation(属性动画)Android动画效果之初识Property Animation(属性动画)(三),并且利用属性动画简单了补间动画 ...

  5. android 帧动画,补间动画,属性动画的简单总结

      帧动画——FrameAnimation 将一系列图片有序播放,形成动画的效果.其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用 在Drawable文件夹下,创建ani ...

  6. [转]Android自定义控件三部曲系列完全解析(动画, 绘图, 自定义View)

    来源:http://blog.csdn.net/harvic880925/article/details/50995268 一.自定义控件三部曲之动画篇 1.<自定义控件三部曲之动画篇(一)—— ...

  7. Android之卫星菜单的实现

    卫星菜单是现在一个非常受欢迎的“控件”,很多Android程序员都趋之若鹜,预览如下图.传统的卫星菜单是用Animation实现的,需要大量的代码,而且算法极多,一不小心就要通宵Debug.本帖贴出用 ...

  8. 动画_ _ Android应用开发之所有动画使用详解

    转载: http://blog.csdn.net/yanbober/article/details/46481171 题外话:有段时间没有更新博客了,这篇文章也是之前写了一半一直放在草稿箱,今天抽空把 ...

  9. Android使用默认样式创建View的几个姿势

    以下内容是分析安卓源码所得: 1: 使用默认样式创建View的方式, 源码文件 Button.Java  注:此文参考http://www.linzenews.com/ 中的内容所写,如侵删! 2: ...

随机推荐

  1. MySQL Server 5.6 解压版安装配置

    MySQL解压版下载地址为: http://dev.mysql.com/downloads/mysql/5.6.html#downloads 安装及配置步骤: ①将MySQL的zip包解压到路径C:\ ...

  2. JavaScript-学习一字符串

    字符串可以存储一系列字符,如 "John Doe". 字符串可以是插入到引号中的任何字符.你可以使用单引号或双引号: 用于字符串的 + 运算符 + 运算符用于把文本值或字符串变量加 ...

  3. ASP.NET WEB API 2 框架揭秘 读书笔记(一)

    第一章 概述 主要内容是介绍Web的基本概念,Restfull的基本概念及特性.最后介绍创建简单WebApi程序的步骤. Web的基本概念 IP/TCP协议簇分层,分为两种 链路层->网络层-& ...

  4. matplotlib入门--1(条形图, 直方图, 盒须图, 饼图)

    作图首先要进行数据的输入,matplotlib包只提供作图相关功能,本身并没有数据读入.输出函数,针对各种试验或统计文本数据输入可以使用numpy提供的数据输入函数. # -*- coding: gb ...

  5. PPT2010中设置音乐播放停止位置

    ppt不仅只是制作幻灯片的效果,而且在制作幻灯片过程中,由于内容很多,每个版块想要呈现的效果是不同的,那么配乐的风格自然也是不同.如何让我们插入的音乐在合适的内容的时候播放和停止呢,下面就来教大家具体 ...

  6. 外卖的撕‘哔’大战 CSU 1559

                                                      CSU 1559 Time Limit:1000MS     Memory Limit:131072 ...

  7. MySQL 5.6.22 win32 zip版安装

    mysql 5.6.22 32位下载地址:http://cdn.mysql.com//archives/mysql-5.6/mysql-5.6.22-win32.zip 1 从http://dev.m ...

  8. C# RGB与16进制颜色转换方法

    http://www.cnblogs.com/goldarch/archive/2010/08/16/1801053.html #region [颜色:16进制转成RGB]        /// &l ...

  9. laravel框架——表单验证

    创建路由 Route::get('test','VerController@index'); Route::post('tosubmit','VerController@tosubmit'); 在控制 ...

  10. 记 tower.im 的一次重构

    原文in here: http://outofmemory.cn/wr?u=http%3A%2F%2Fblog.mycolorway.com%2F2013%2F05%2F01%2Ftower-refa ...