美文网首页
Android视图绘制流程完全解析--初稿

Android视图绘制流程完全解析--初稿

作者: 颤抖的闪电 | 来源:发表于2018-02-01 13:52 被阅读0次

一. onMeasure()的大致流程
View系统的绘制流程会从ViewRoot.performTraversals()方法中开始,
ViewGroup->measureChildren()->(循环调用)measureChild()->View.measure()
View->measure()->onMeasure()->(默认)getDefaultSize()

二. onLayout()
View.measure()结束后继续执行
ViewRoot.performTraversals()->View.layout(int l, int t, int r, int b)(左、上、右、下)->View.onLayout(changed, l, t, r, b)(View.onLayout()是个空方法)
ViewGroup中->onLayout()(因为onLayout()过程是为了确定视图在布局中所在的位置,而这个操作应该是由布局来完成的,即父视图决定子视图的显示位置)
ViewGroup.onLayout()->View.onLayout()

三. onDraw()
ViewRoot中的代码会继续执行并创建出一个Canvas对象,然后调用View的draw()方法来执行具体的绘制工作。
第一步是,这一步的作用是对视图的背景进行绘制。这里会先得到一个mBGDrawable对象,然后根据layout过程确定的视图位置来设置背景的绘制区域,之后再调用Drawable的draw()方法来完成背景的绘制工作。
第三步,onDraw(canvas),这一步的作用是对视图的内容进行绘制。可以看到,这里去调用了一下onDraw()方法
第四步,dispatchDraw(canvas),这一步的作用是对当前视图的所有子视图进行绘制。但如果当前的视图没有子视图,那么也就不需要进行绘制了。因此你会发现View中的dispatchDraw()方法又是一个空方法,而ViewGroup的dispatchDraw()方法中就会有具体的绘制代码。
第六步,也是最后一步,这一步的作用是对视图的滚动条进行绘制。

Android LayoutInflater原理分析,带你一步步深入了解View(一)
Android视图绘制流程完全解析,带你一步步深入了解View(二)
Android视图状态及重绘流程分析,带你一步步深入了解View(三)
Android自定义View的实现方法,带你一步步深入了解View(四)
Android PowerImageView实现,可以播放动画的强大ImageView

相关文章

网友评论

      本文标题:Android视图绘制流程完全解析--初稿

      本文链接:https://www.haomeiwen.com/subject/zinrzxtx.html