今天看博客从源码看invalidate和requestLayout的区别 ,其中提及一点:invalidate()向上查父ViewParent,最后会查询到ViewRootImpl里面。
虽然以前view绘制流程的时候弄明白过,不过忘记了,也没有找到以前的笔记,网上搜了两下也没有看到,只有按思路理一遍,ViewRootImpl 又没有继承View,最后怎么可能会找到VireParent,理论上来说可以查到DecorView,它是View的子类。
其向上查询时使用函数 invalidateChildInParent(),其返回的是ViewParent,而不是View。
而ViewRootImpl确实也实现了ViewParent接口。但是还是要看它是怎么关联起来的?
而ViewRootImpl 与DecorView 的关系:VIewRootImpl.setView(decorView)。
那么必定是这个过程中产生了联系,果然,setView里面有以下代码
view.assignParent(this);
就是给decorView指定ViewParent,也就是说,decorView的ViewParent就是ViewRootImpl。
网友评论