面试题自定义控件

高级UI------(一)UI的绘制流程

2019-08-23  本文已影响0人  一只胖胖胖胖猿

View是如何被添加到屏幕窗口的

View的绘制流程

ActivityThread.handleResumeActivity  
-->WindowManagerImpl.addView(dercorView,layoutParams)
-->WindowManagerGlobal.addView()
ViewRootImpl.-->setView(decorView,layoutParams,parentView)
-->ViewRootImpl.requestLayout()-->scheduleTraversals()-->doTraversal()
-->performTraversals()
测量:ViewRootImpl.performMeasure
布局:ViewRootImpl.performLayout
绘制:ViewRootImpl.performDraw

UI绘制详细步骤

view.measure-->view.onMeause-->view.setMeasuredDimension
-->setMeasuredDimensionRaw
ViewRootImpl.draw(fullRedrawNeeded)
-->ViewRootImpl.drawSoftware-->view.draw(Canvas)

View的测量- 确定DecorView的MeasureSpec

1、DecorView的MeasureSpec由窗口大小和自身LayoutParams决定,遵守如下规则:
2、View的MeasureSpec由父容器的MeasureSpec和自身LayoutParams决定

View的布局

1、调用view.layout确定自身的位置,即确定mLeft,mTop,mRight,mBottom的值
2、如果是ViewGroup类型,需要调用onLayout确定子View的位置

View的绘制

1、绘制背景drawBackground(canvas)
2、绘制自己onDraw(canvas)
3、绘制子View dispatchDraw(canvas)
4、绘制前景,滚动条等装饰onDrawForeground(canvas)
上一篇 下一篇

猜你喜欢

热点阅读