Android中的动画分为帧动画、View动画和属性动画三种。

帧动画

帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,一张一张的图片连续播放。

  • 在res/drawable目录下定义一个XML文件,根节点为系统提供的animation-list,然后放入定义更好的图片;
  • 使用AnimationDrawable类播放第一步定义好的Drawable中的图片,形成动画效果;

View动画

也称为补间动画,正如其名,它的作用对象只能是View,我们只需要拿到一个view,设定它开始和结束的位置,中间的view会自动由系统补齐,而不需要帧动画每一幅图都是提前准备好的。

View 动画改变的是 View 的绘制效果,View 的真正位置和相关属性并不会改变,这也就造成了点击事件的触发区域是动画前的位置而不是动画后的位置的原因。

View动画的种类

平移(translate)、缩放(scale)、旋转(rotate)、透明度(alpha)四种基本效果,我们可以再这四种基础效果的基础上,选择其中的几种进行组合(使用set标签将这些标签进行组合)。

两种使用方法:xml中定义、代码中动态设置。(四种效果对应相应的XXXAnimation类,如translate对应TranslateAnimation)

View动画的特殊使用场景

  • LayoutAnimation作用于ViewGroup,为ViewGroup指定一个动画,这样当它的子元素出场时都会有这种动画效果
  • Activity和Fragment的切换效果

Activity的入场动画必须在startActivity后调用overridePendingTranstion方法;出场动画必须在finish方法后调用overridePendingTranstion方法。

属性动画

和View动画不同的是,它可以对任何对象的任意属性做动画。它要求对象的该属性有set和get方法。

View动画和属性动画的区别

  • View 动画改变的是 View 的绘制效果,View 的真正位置和相关属性并不会改变。
  • 属性动态的效果其实就是在一个时间间隔内完成一个对象从一个属性值到另一个属性值的改变。

插值器和估值器

  • 插值器主要作用是给出在给定时间内值的变化模式(匀速/加速等)
  • 估值器的主要作用是决定值的具体变化数值。