view绘制,是从performtravel()方法开始的,并依次执行mearsure-->layout--->draw方法完成绘制流程,如果需要自定义view的话,需要重写onmearsure,onlayout,ondraw方法;view的mearsure过程就是完成view的宽高测量的过程,view测量的宽高是由父view的mearsureSpec和自己的layoutParm共同决定的,mearsureSpec的包括mode和size,mode有三种模式:exzacly,atmost,unspecial;(1.精确的测量,子view(match和warp的话)的宽高就是父view的宽高;2.子view的宽高最大不能超过父view的 3.子view的宽高可以任意),最终通过setMeasuredDimension完成测量;view的onlayout方法为空实现;view的draw就绘制呗,主要有6步忽略2步(1.对view背景绘制 2.对view内容绘制 3.对子view进行绘制 4.对滚动条进行绘制);程请求重新绘制用invalidate,子线程用postinvalidate
viewgroup的绘制跟view绘制大致一样,不过自定义viewgroup中,onmearsure方法中viewgroup先测量自己的宽高,然后再调用measureChild方法绘制view,最后调用setMeasuredDimension完成绘制,重写onlayout,getChildCount得到子view的个数,遍历子view,根据测量的宽高再综合Margin用child.layout对子view进行放置;dispatchDraw()方法中通过drawChild对子view进行绘制,draw为空实现