Android绘制

Android的绘制包含三个部分  测量 布局 和 绘制

 

1.测量的目的是让父布局清楚子view的大小 然后方便根据父布局的布局规则进行布局

关于测量:view的测量方法是onMeasure 在里面 view需要实现对自己的测量 ,然后通过setMeasureDimension来确定自己测量后的大小以提供给父布局作参考。

其中view的onMeasure方法提供了两个参数 也就是widthSpec和heightSpec,这两个spec是由父布局提供的,用于子view测量自己作参考。

而viewGroup的测量 一部分需要确认子view的布局方式,并根据子view测量后的大小决定自己的大小,另一部分一些装饰性的布局也会影响自己的最终大小。

2.布局的目的是让父布局确认子view的 左上 右下 也就是在父布局中的位置 

布局的直接效果是child的left top right bottom都有了具体的值

布局也是为了让父布局能统一的确定所有子view的位置,这样后面如果位置不发生改变,那后续就没有必要做测量,布局了。

3.绘制

绘制是一个view画出自身的过程,本身view是有好几层的,背景,内容,前景

而绘制是包括硬件绘制和软件绘制:

硬件绘制走的是ViewRootImpl的mAttachInfo.mThreadedRenderer.draw(mView, mAttachInfo, this)

软件绘制走的是ViewRootImpl的drawsoftware(里面走的是mView.draw)
你无须担心你自定义的view的ondraw得不到调用,因为在硬件绘制上的
updateViewTreeDisplayList操作会进行执行。

 

通过测量,布局,绘制 图像便显示出来 然后等待下一个Vsync信号到来,如果一切都没有改变,后续不会再绘制而是直接使用旧的,如果出现了动画,那么每次都可能会执行者三个动作。

 

posted @ 2018-03-05 13:36  lightverse  阅读(145)  评论(0编辑  收藏  举报