Android 绘制顺序
来源:互联网 发布:网络摄像机厂家 编辑:程序博客网 时间:2024/05/17 12:48
- 转载于
- View的绘制顺序
- draw 总调度方法
- 两个注意事项
- 为什么需要调用 setWillNotDraw
- 优先使用 onDraw
- View的绘制顺序
转载于
强烈推荐:http://hencoder.com/ui-1-5/
View的绘制顺序
draw() 总调度方法
除了 onDraw() dispatchDraw() 和 onDrawForeground() 之外,还有一个可以用来实现自定义绘制的方法: draw()。
draw() 是绘制过程的总调度方法。一个 View 的整个绘制过程都发生在 draw() 方法里。前面讲到的背景、主体、子 View 、滑动相关以及前景的绘制,它们其实都是在 draw() 方法里的。
// View.java 的 draw() 方法的简化版大致结构(是大致结构,不是源码哦):
public void draw(Canvas canvas) { ... drawBackground(Canvas); // 绘制背景(不能重写) onDraw(Canvas); // 绘制主体 dispatchDraw(Canvas); // 绘制子 View onDrawForeground(Canvas); // 绘制滑动相关和前景 ...}
两个注意事项
在 ViewGroup 的子类中重写除 dispatchDraw() 以外的绘制方法时,
可能需要调用setWillNotDraw(false)
在重写的方法有多个选择时,优先选择 onDraw()。
为什么需要调用 setWillNotDraw
出于效率的考虑,ViewGroup 默认会绕过 draw() 方法,换而直接执行 dispatchDraw(),以此来简化绘制流程。所以如果你自定义了某个 ViewGroup 的子类(比如 LinearLayout)并且需要在它的除 dispatchDraw() 以外的任何一个绘制方法内绘制内容,你可能会需要调用 View.setWillNotDraw(false) 这行代码来切换到完整的绘制流程(是「可能」而不是「必须」的原因是,有些 ViewGroup 是已经调用过 setWillNotDraw(false) 了的,例如 ScrollView)。
优先使用 onDraw
有的时候,一段绘制代码写在不同的绘制方法中效果是一样的,这时你可以选一个自己喜欢或者习惯的绘制方法来重写。但有一个例外:如果绘制代码既可以写在 onDraw() 里,也可以写在其他绘制方法里,那么优先写在 onDraw() ,因为 Android 有相关的优化,可以在不需要重绘的时候自动跳过 onDraw() 的重复执行,以提升开发效率。享受这种优化的只有 onDraw() 一个方法。
- Android 绘制顺序
- android xml布局文件的绘制顺序
- android自定义View学习5--绘制顺序
- android自定义view--绘制顺序及相关原理
- 关于Android中界面XML文件的绘制顺序
- android自定义view–绘制顺序及相关原理
- android自定义view–绘制顺序及相关原理
- android自定义view-绘制顺序及相关原理
- android自定义view–绘制顺序及相关原理
- android自定义view–绘制顺序及相关原理
- android自定义view–绘制顺序及相关原理
- Android ViewGroup指定子View的绘制顺序
- U3D控制绘制顺序
- 元素绘制顺序
- android 绘制
- EA建模-绘制顺序图
- Android中的View与ViewGroup绘制过程,手势监听顺序与使用
- GC绘图小技巧:调整绘制顺序
- 【二进制分组+AC自动机】HDU4787[GRE Words Revenge]题解
- 给c++跪了.cpp
- 【IDEA Intel 输入法】Android Studio ,和 PhpStorm ,修复中文输入法,运用了两套 jre64 工具来解决。
- shell脚本-复制root目录下所有目录到tmp/下
- Centos搭建持续集成(六)----安装Maven以及nexus3私服
- Android 绘制顺序
- 【重装ubuntu16.04】一些细节
- centos 安装 grpc
- 免费GIS数据下载网站推荐
- 基本特新
- PHPstorm常用快捷键
- QQ好友与socket猜想
- scala第三讲:基本语法
- 学习一款游戏引擎