没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
android 动画框架原理与实现分析
框架原理
现有的 Android 动画框架是建立在 View 的级别上的,在 View 类中有一个接口 startAnimation
来使动画开始,startAnimation 函数会将一个 Animation 类别的参数传给 View,这个 Animation 是
用来指定我们使用的是哪种动画,现有的动画有平移,缩放,旋转以及 alpha 变换等。如果需要更复杂
的效果,我们还可以将这些动画组合起来,这些在下面会讨论到。
要了解 Android 动画是如何画出来的,我们首先要了解 Android 的 View 是如何组织在一起,以及
他 们 是 如 何 画 自 己 的 内 容 的 。 每 一 个 窗 口 就 是 一 棵 View 树 , 下 面 以 我 们 写 的
android_tabwidget_tutorial.doc 中的 tab 控件的窗口为例,通过 android 工具 hierarchyviewer
得到的窗口 View Tree
其实这个图不是完整的,没有把 RootView 和 DecorView 画出来,RootView 只有一个孩子就是
DecorView , 这 里 整 个 View Tree 都 是 DecorView 的 子 View , 它 们 是 从
android1.5/frameworks/base/core/res/res/layout/screen_title.xml 这个 layout 文件 in#ate
出来的,感兴趣的读者可以参看
Frameworks/policies/base/phone/com/android/internal/policy/Imp/PhoneWindow.java 中
generateLayout 函数部分的代码。我们可以修改布局文件和代码来做一些比较 cool 的事情,如象
Windows 的 缩 小 / 关 闭 按 钮 等 。 标 题 窗 口 以 下 部 分 的 FrameLayout 就 是 为 了 让 程 序 员 通 过
setContentView 来设置用户需要的窗口内容。因为整个 View 的布局就是一棵树,所以绘制的时候也
是按照树形结构遍历来让每个 View 进行绘制。ViewRoot.java 中的 draw 函数准备好 Canvas 后会调
用 mView.draw(canvas),其中 mView 就是调用 ViewRoot.setView 时设置的 DecorView。然后看
一下 View.java 中的 draw 函数:
递归的绘制整个窗口需要按顺序执行以下几个步骤:
绘制背景;
如果需要,保存画布(canvas)的层为淡入或淡出做准备;
绘制 View 本身的内容,通过调用 View.onDraw(canvas) 函数实现,通过这个我们应该能看出来
onDraw 函数重载的重要性,onDraw 函数中绘制线条 / 圆 / 文字等功能会调用 Canvas 中对应的功能。
下面我们会 drawLine 函数为例进行说明;
绘 制自 己 的 孩 子 ( 通 常 也 是 一 个 view 系 统 ) , 通 过 dispatchDraw(canvas) 实 现 , 参 看
ViewGroup.Java 中的代码可知,dispatchDraw->drawChild->child.draw(canvas) 这样的调用过
程被用来保证每个子 View 的 draw 函数都被调用,通过这种递归调用从而让整个 View 树中的所有
View 的内容都得到绘制。在调用每个子 View 的 draw 函数之前,需要绘制的 View 的绘制位置是在
Canvas 通过 translate 函数调用来进行切换的,窗口中的所有 View 是共用一个 Canvas 对象
如果需要,绘制淡入淡出相关的内容并恢复保存的画布所在的层(layer)
绘制修饰的内容(例如滚动条),这个可知要实现滚动条效果并不需要 ScrollView,可以在 View
中完成的,不过有一些小技巧,具体实现可以参看我们的 TextViewExample 示例代码
当一个 ChildView 要重画时,它会调用其成员函数 invalidate() 函数将通知其 ParentView 这个
ChildView 要重画,这个过程一直向上遍历到 ViewRoot,当 ViewRoot 收到这个通知后就会调用上面
提到的 ViewRoot 中的 draw 函数从而完成绘制。View::onDraw() 有一个画布参数 Canvas, 画布顾名
资源评论
- xwyzn2012-08-10仔细看了下,架构讲的很详细,对代码的理解帮助很大.
- jeiwen5202012-07-09写的很好,清晰的指出来动画的画龙去脉,就是没有加入一定的实例说明,理论性强了些。
- 小小豆豆浆2014-04-16http://blog.csdn.net/yelbosh/article/details/7750500直接看这个帖子就好了 还要了四分,我以为有点别的东西了,还是没有涉及到属性动画等其他的。
雾里看花-2012
- 粉丝: 7
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功