安卓如何绘制视图

4
Android绘制视图指南中,因为遍历树是按顺序进行的,这意味着父级在其子级之前(即后面)被绘制,并且兄弟按照它们在树中出现的顺序绘制。作者实际上是否是指“先序”,而不是“中序”?谢谢你的帮助。

你对“pre-order”和“in-order”的概念有定义吗?我猜作者只是指存在一种顺序,而视图不会以绝对混乱的方式刷新。 :) - Snicolas
1
我认为他指的是树遍历顺序。(http://en.wikipedia.org/wiki/Tree_traversal) - Mircea Nistor
2个回答

6

这更像是使用"深度优先遍历"来测量子元素的顺序,而使用"前序遍历"来进行实际绘制。

父元素会先被绘制并且所有子元素会在其上层堆叠绘制。


测量阶段也将是一个先序遍历,为什么会有差异? - galath
1
你可以在父元素中使用 android:layout_width="wrap_content",这样子元素就必须被测量以确定内容的大小。 - Mircea Nistor
前序遍历是深度优先搜索的一种形式。 - numan salati
右子节点怎么办?如果按顺序测量,我们可以得到左侧所有子节点的大小,但右侧的子节点呢?它如何获取左侧子节点的大小?在绘制父级之前,应先测量所有子级,然后再绘制父级。我想测量应该是后序的,实际绘制应该是前序的。 - Nadir Laskar

5

这是文档中的一个错误。应该是先序遍历,即父节点在子节点之前绘制。

大多数UI工具库(包括Android)都是这样做的:

  • 按照先序遍历从上到下渲染视图层次结构 - 先绘制自身,然后绘制子节点

  • 测量(大小计算)是按照后序遍历从下到上进行的 - 先测量子节点,然后测量自身

  • 布局(定位)是按照先序遍历从上到下进行的 - 首先我的父节点定位我,然后我定位我的子节点


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接