Android动画原理分析(一)----补间动画

1、基本特点 【Android动画原理分析(一)----补间动画】补间动画(Tween动画),是android最早的动画框架,从Android1.0开始就有。
功能:可以实现移动、旋转、缩放、渐变四种效果以及这四种效果的组合形式。
实现形式:xml和代码。
优点:使用简单效果流畅。
缺点:1、扩展性差,不支持自定义view;
2、动画只改变控件在屏幕的位置,不改变控件的实际属性。典型例子:Button执行完动画移动到另外位置,点击事件还在原来的地方。
2、设计原理: 虽然补间动画有点古老,但是他的设计思想挺值得分析和借鉴的。这一块的源代码位于package android.view.animation
下图是补间动画的主体类图:
[外链图片转存失败(img-MDTDeKMK-1562952161376)(https://upload-images.jianshu.io/upload_images/16477783-d0a4dd4f78ecd5b5.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]
动画的状态数据存在Transformation类中,主要的两个成员是mAlpha用了描述渐变效果和Matrix用来描述缩放旋转和平移效果。
通过AnimationUtils可以加载xml描述的动画或者通过调用构造函数生成需要的动画
动画的中间值则是由TimeInterpolator子类通过各种算法插值得出。
而Animation和Interpolator是由AnimationUtils加载xml或者通过默认值创造出来。
整个补间动画模块是在View绘制时嵌入的,下图是简要的时序图:
[外链图片转存失败(img-NFz2iV4p-1562952161377)(https://upload-images.jianshu.io/upload_images/16477783-a84dfdb61b5fbaf2.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]
VIew的绘制过程是很复杂的,这里只是介绍了一下调用补间动画模块的一个过程,如果有兴趣可以自己查看Android源码。上图箭头上是函数方法名。
3、使用指南 这一块有很多人都写过,也写的很好。这里推荐一篇
Android高级动画(1)
4、总结 (1)通过看源码可以彻底明白补间动画的优缺点,实现原理及设计思路;
(2)只能实现平移、缩放、旋转、渐变的原因是这一套框架中的元数据Transformation 只保存了alpha和一个描述几何变换的矩阵。
(3)不支持自定义view的原因是动画模块的调用起点在viewgroup

/*** This method is called by ViewGroup.drawChild() to have each child view draw itself.** This is where the View specializes rendering behavior based on layer type,* and hardware acceleration.*/boolean draw(Canvas canvas, ViewGroup parent, long drawingTime) {}

    推荐阅读