--- 动画相关口水话 --- #### 目录 1. 三种动画 2. 插值器、估值器 3. 动画源码 #### 三种动画 桢动画、补间动画和属性动画。桢动画可以使用 AnimationDrawable 或者定义一个 xml,使用简单,不过需要注意图片是全部加载到内存中,可能导致 OOM。补间动画即位移、旋转、缩放、透明度动画,可以定义 xml 然后用 AnimationUtils 加载,也可以直接 new TranslateAnimation 等等。基本上大部分动画都能实现,常用于 Activity 转场动画、Dialog 弹出动画等,缺点是只改变显示,不改变实际属性。属性动画即 Animator,它是一个抽象类,有两个直接子类,一个是 AnimatorSet 用于组合动画,一个是 ValueAnimator。ValueAnimator 需要手动添加监听器,更加灵活。ValueAnimator 也有两个子类,一个是 ObjectAnimator,每次更新时自动走 setXxx 方法,所以不需要像 ValueAnimator 那样添加监听器,还一个是 TimeAnimator,它只做一件事,提供一个时间流,每 18ms 回调一次。 #### 估值器、插值器 估值器表示属性的初始值过渡到结束值变化的具体数值,而插值器则表示变化率,比如先加速后减速(默认),匀速等等。 自定义估值器都需要实现 TypeEvaluator 接口,系统已经有几个默认实现,比如 ArgbEvaluator、IntEvaluator、FloatEvaluator 等等。比较常用的是 ArgbEvaluator 来实现颜色渐变。 自定义插值器更简单,只需要实现 TimeInterpolator 或 Interpolator,系统也内置了几种实现,默认是先加速后减速,即 AccelerateDecelerateInterpolator,看一下源码发现不过是余弦函数在 pi/2 到 pi 直接,也就是先加速后减速。