UI绘制流程的三部曲----Draw
之前的三篇文章的最后说到了三个步骤那就是Measure,Layout,Draw。接下来的三篇文章主要从源码的角度来分析这三个过程的具体实现。
-
Measure流程分析
-
Layout流程分析
-
Draw流程分析
本章主要梳理Draw过程
三、Draw流程分析
我们和Measure和Layout流程一样从performDraw开始分析
我们查看performDraw()方法的源码,里面存在draw方法,继续查看
进入draw方法中,发现代码很多,并没有找到一些关键性的东西,重要的是没有找到mView.draw方法,为什么我要提这个方法呢?读过前两篇博客的同学都知道,在measure和layout的过程中都存在了mView.layout或mView.measure方法,然后覆写的onLayout和onMeasure。但是这里我却没有找到,所以我就逆向思维的去思考,直接去查mView.draw这个方法,果然在drawSoftware方法中找到了mView.draw方法,而这个drawSoftware在上面的方法源码中有调用
我们点进查看draw方法
很醒目的一段注释,翻译一下:
绘制流程的六个步骤:
1、对View的背景进行绘制
2、保存当前的图层信息
3、绘制View的内容
4、对View的子View进行绘制(如果有子View)
5、绘制View的褪色的边缘,类似于阴影效果
6、绘制View的装饰
这就是这个方法的主要工作,而且也标明了哪行代码是哪步,很贴心,而这6个步骤我会单独写一篇博客分析,今天的博客就到这里了
欢迎留言,欢迎纠错,共同进步!