View 测量过程&MeasureSpec
ViewRootImpl的layout方法实际调用了performTraversals(),其中调用measureHierarchy(),其中调用getRootMeasureSpec()获取宽高。之后调用performMeasure()。其中调用View.measure()。其中调用View.onMeasure(),可以复写该方法,并调用setMeasureDimension()测量位置。
View layout过程
ViewGroup:调用onLayout(),调用layoutChildren().最后调用子View的layout().
View:在layout(l,t,r,b),调setFrame(l,t,r,b)。
View draw过程
ViewGroup:调用dispatchDraw(Canvas),调用drawChild(),调用子View的draw()。
View:在draw()方法中,绘制自己的内容onDraw(Canvas),绘制子View的内容dispatchDraw(Canvas)。
网友评论