美文网首页
invalidate()内部向上查父ViewParent,为什么

invalidate()内部向上查父ViewParent,为什么

作者: vanzh | 来源:发表于2019-05-09 16:03 被阅读0次

    今天看博客从源码看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。

    相关文章

      网友评论

          本文标题:invalidate()内部向上查父ViewParent,为什么

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