Android Animation 机制详解

Android Animation 机制详解

目录

[TOC]

本篇博客我将和大家一起学习Android Animation的实现原理, 而不是Animation的使用

Animation的分类

-Tweend动画即通过对场景里的对象不断做图像变换 ( 平移、缩放、旋转 ) 产生动画效果

-Frame 动画即顺序播放事先做好的图像,跟电影类似

Android 动画框架原理

要了解Android动画是如何加载出来的,我们首先要了解Android View 是如何组织在一起的.每个窗口是一颗View树. RootView是DecorView,在布局文件中声明的布局都是DecorView的子View.是通过setContentView来设置进入窗口内容的. 因为View的布局就是一棵树.所以绘制的时候也是按照树形结构来遍历每个View进行绘制.ViewRoot.java中 draw函数准备好Canvas后 调用 mView.draw(canvas),这里的mView是DecorView.下面看一下递归绘制的几个步骤:

1.绘制背景

2.如果需要,保存画布(canvas),为淡入淡出做准备

3.通过调用View.onDraw(canvas)绘制View本身的内容

4.通过 dispatchDraw(canvas)绘制自己的孩子,dispatchDraw->drawChild->child.draw(canvas) 这样的调用过程被用来保证每个子 View 的 draw 函数都被调用

5.如果需要,绘制淡入淡出相关的内容并恢复保存的画布所在的层(layer)

6.绘制修饰的内容(例如滚动条)

当一个 ChildView 要重画时,它会调用其成员函数 invalidate() 函数将通知其 ParentView 这个 ChildView 要重画,这个过程一直向上遍历到 ViewRoot,当 ViewRoot 收到这个通知后就会调用上面提到的 ViewRoot 中的 draw 函数从而完成绘制。Android 动画就是通过 ParentView 来不断调整 ChildView 的画布坐标系来实现的

Android Animation 机制详解_第1张图片
这里写图片描述

动画的具体实现

Animation动画Transformation顾名思义 :变化Animation 中主要定义了动画的一些属性比如开始时间、持续时间、是否重复播放等在Animation中有两个重要的函数:

1.getTransformation getTransformation 中 Animation 会根据动画的属性来产生一系列的差值点,然后将这些差值点传给 applyTransformation

2.applyTransformation 这个函数将根据这些点来生成不同的 Transformation
Transformation中包含一个矩阵和 alpha 值,矩阵是用来做平移、旋转和缩放动画的,当调用dispatchDraw时会调用getTransformation来得到当前的Transformation**,如下:

Android Animation 机制详解_第2张图片

所以具体的动画只需要重载 applyTransformation 这个函数即可

读到这里,相信大家应该对animation的原理有所了解. 如果你感觉这篇文章很难理解,建议先去学习有关的基础知识.欢迎大家提问,互相进步.

[footnote][footnote]: 这是一篇笔记,供大家学习和参考---------

你可能感兴趣的:(Android Animation 机制详解)