(翻译)API-How Android Draws Views

Android 怎样绘制视图

当一个活动获取焦点,要绘制自己的布局。Android框架会操作绘图过程,但是活动必须提供布局层次的根节

点。
  绘图开始于布局的根节点。它需要调整并绘制布局树。通过遍历树和描绘相交于无效区域的每个视图操作绘

图(????)。反过来,每个视图组是要求它的每个子节点被绘制(使用draw()方法),并且每个视图要求

绘制出自己。由于树是按照次序遍历的,意味着父节点在子节点前被绘制,而兄弟节点按照出现在树的次序被

绘制。
(注:框架将不会绘制不在无效的区域的视图,也将考虑制定背景。你可以强制绘制视图,通过调用

invalidate()方法)
  绘制布局有两个过程:一个衡量阶段和一个布局阶段。衡量阶段是实现了measure(int,int)接口,并且从上

而下遍历视图树。每个视图递归设置尺寸规格到树。在衡量阶段的最后,每个视图都存有自己的尺寸。第二阶

段发生在layout(int,itn,int,int),也是从上而下。这个阶段,每个父节点将在衡量阶段已经计算了大小的子

节点安排好位置。
  当一个View的measure()方法返回值,除了全部视图的派生,还有他的getMeasureWidth()和

getMeasureHeight()值必须设置。View标准的宽和高值必须符合View父节点附加的约束。在衡量阶段的最后要

保证所有父节点能接受他们的子节点的尺寸。父View可以多次调用measure()方法在子节点上。例如,如果子

View的不约束大小太大或太小(如果子节点不满意他们所得的空间,父节点就要在第二阶段阻止并指定规则)

,父View可以测量每个没有指定尺寸的子View,找出来他们需要多大空间,然后调用measure()方法重新给子

View确切的数值。 
  衡量阶段用到两个类表示尺寸。View可以用View.Measurespec类通知父类怎样测量放置。基类LayoutParams

只描述了View的宽和高多大。对于每个尺寸,能用下面的任意一个:1、一个精确的数值 2、FILL_PARENT,跟

父节点一般大 3、WRAP_CONTENT,它内容的大小。
(注:创始布局,调用requestLayout ()。View不再合适当前区域内时通常对自己调用这个方法。)
  LayoutParams类的子类有些是不同于ViewGroup的子类。例如,RelativeLayout有自己的包含能够水平和垂直

方向居中的LayoutParam子类。
MeasureSpecs被用在放置要求到树从父节点到子节点。MeasureSpec能是下面三个模式之一:1、UNSPECIFIED,

用在父节点测定子View的期望尺寸。例如,LinearLayout能调用measure()在它高为UNSPECIFIED、宽为WXACTLY

240的子节点,查出子View希望给240像素的高度。 2、EXACTLY,用于父节点给子节点设置一个确切的数值。子

节点必须用这个值,还要保证它的子类在这个值内。 3、AT_MOST,用于父节点给子节点设置一个最大值。子节

点必须用这个值,还要保证它的子类在这个值内。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值