1.帧动画
- 在res/drawable目录下定义一个XML文件,根节点为系统提供的animation-list,然后放入定义好的图片;
- 使用AnimationDrawable类播放第一步定义好的Drawable中的图片,形成动画效果;
2. view动画(补间动画)
实现平移、缩放、旋转、渐变等效果
源码分析:
对xml用XMLPullParser进行解析,通过next()方法遍历xml中所有的节点,最后返回了一个Animation对象;通过startAnimation方法开始执行动画流程:
补间动画平移,透明度等属性设置会影响matrix、alpha,最后在draw方法中通过matrix和alpha去进行绘制展示出连贯的动画效果;
3.属性动画(和view动画相比,属性动画可以响应变化后的区域)
属性动画和view动画不同点:
- 补间动画只能定义两个关键帧在透明、旋转、位移和倾斜这四个属性的变换,但是属性动画可以定义任何属性的变化。
- 补间动画只能对 UI 组件执行动画,但属性动画可以对任何对象执行动画。
源码分析:
ofFloat实例化了ObjectAnimator对象,设置了target、时长、插值器等等,拿到IntPropertyValueHolder调用setAnimatedValue,通过反射为属性设置值比如target,propname值;通过start开始执行动画流程,不断地重复scheduleAnimation,在scheduleAnimation中通过属性值去改变动画状态,直到duration结束;
三种动画的优缺点: