上述就是View的measure大年夜致过程,在measure完成之后,经由过程getMeasuredWidth/Height办法就可以获得测量后的宽高,这个宽高一般情况下就等于View的最终宽高了,因为View的layout构造的时刻就是根据measureWidth/Height来设置宽高的,除非在layout中修改了measure值。
Layout构造
Layout的感化是ViewGroup用来肯定子元素的地位,当ViewGroup的地位被肯定后,它在onLayout中会遍历所有的子元素并调用其layout办法。简单的来说就是,layout办法肯定View本身的地位,而onLayout方轨则会肯定所有子元素的地位。
先看看View的layout办法:
- public void layout(int l, int t, int r, int b) {
- if ((mPrivateFlags3 & PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT) != 0) {
- onMeasure(mOldWidthMeasureSpec, mOldHeightMeasureSpec);
- mPrivateFlags3 &= ~PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;
- }
- int oldL = mLeft;
- int oldT = mTop;
- int oldB = mBottom;
- int oldR = mRight;
- boolean changed = isLayoutModeOptical(mParent) ?
- setOpticalFrame(l, t, r, b) : setFrame(l, t, r, b);
- if (changed || (mPrivateFlags & PFLAG_LAYOUT_REQUIRED) == PFLAG_LAYOUT_REQUIRED) {
- onLayout(changed, l, t, r, b);
- if (shouldDrawRoundScrollbar()) {
- if(mRoundScrollbarRenderer == null) {
- mRoundScrollbarRenderer = new RoundScrollbarRenderer(this);
- }
- } else {
- mRoundScrollbarRenderer = null;
- }
- mPrivateFlags &= ~PFLAG_LAYOUT_REQUIRED;
- ListenerInfo li = mListenerInfo;
- if (li != null && li.mOnLayoutChangeListeners != null) {
- ArrayList<OnLayoutChangeListener> listenersCopy =
推荐阅读
在处理矢量化数据时,记录中往往话苄很多反复数据,对进一步数据处理带来诸多不便。多余的数据一方面浪费了较多的存储空间,另一方面造成所要表达的图形不但滑或不相符标准。是以要经由过程某种规矩,在包管矢量曲线>>>详细阅读
本文标题:Android View绘制的三大流程
地址:http://www.17bianji.com/lsqh/36843.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示