文章目录
一、自定义View执行invalidate()方法为什么有时候不会回调onDraw()?
首先我们分析一下invalidate()
的执行流程,源码是如何从invalidate
调用到onDraw()
的。由于这部分代码相对较为复杂,那么请大家参考下面的时序图。
1.1 invalidate 软件绘制流程
invalidate 软件绘制流程
如下所示:
从上面的流程不难发现:
-
view
的invalidate
会逐层找parent
一直找到DecorView
,DecorView
是顶层view
,它有个虚拟父view
为ViewRootImpl
。ViewRootImpl
不是一个View
或者ViewGroup
,它的成员mView
就是DecorView
,然后再由ViewRootImpl
将所有的操作从ViewRootImpl
自上而下开始分发,最终分发给所有的View
。 -
View
的