美文网首页
View的工作原理

View的工作原理

作者: 哇楼主 | 来源:发表于2019-10-12 17:49 被阅读0次

ViewRoot和DecorView

ViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通ViewRoot来完成的,在ActivityThread中,当Activity对象被创建完毕后,会讲DecorView添加到Window中,同时会创建ViewRootImpl对讲,通过ViewRootImpl.setView方法将ViewRootImpl和DecorView关联。

View的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure,layout,draw三个过程,其中measure用来测量View的宽高,layout用来确定View在父容器中的放置位置,draw则负责将view绘制在屏幕上。

performTraversals会依次调用performMeasure、performLayout、performDraw三个方法,这三个方法分别完成顶级View的measure、layout、draw这三个过程,其中在performMeasure中会调用measure方法,在measure方法中又会调用onMeasure方法,在onMeasure方法中则会对所有子元素进行measure过程,这个时候measure流程就从父容器传递到子元素了,这样就完成了一次measure过程。接着子元素会重复父容器的measure过程,如此反复就完成了整个view树的遍历,performLayout、performDraw传递流程和performMeasure是类似的,唯一不同的是performDraw的传递过程是在draw方法中通过dispatchDraw来实现的,不过这本质没有区别。

measure过程:

如果只是一个原始的View,那么通过measure->onMeasure方法就可以完成测量过程,如果是一个ViewGroup,除了完成自己的测量外,还会遍历去调用所有子元素的measure方法,各个子元素再递归调用这个过程
直接继承View的自定义控件需要重写onMeasure方法并且设置wrap_content时的自身大小,否在在布局中使用wrap_content就相当于使用match_partent

image.png
因为默认宽高等于specSize,这种情况下specSize是partentSize,也就是父容器目前可用大小

layout过程:

layout的作用是ViewGroup用来确定子元素的位置,当ViewGroup的位置被确定后,他在onLayout中会遍历所有的子元素并调用其layout方法,在layout方法中onLayout又会被调用。layout方法确定view本身的位置,onlayout方法确定所有子元素的位置

draw过程:

  • 绘制背景background.draw(canvas)
  • 绘制自己(onDraw)
  • 绘制children(dispatchDraw)
  • 绘制装饰(onDrawForeground)
  • 绘制默认焦点突出显示(drawDefaultFocusHighlight(canvas))


    image.png

相关文章

  • View 的测量

    接着上篇 View 基础 来讲 View 的工作原理,View 的工作原理中最重要的就是测量、布局、绘制三大过程,...

  • 【Android】自定义ViewGroup

    关于View的工作原理、绘制流程等,在第4章 View的工作原理[https://www.jianshu.com/...

  • View 工作原理

    1、 ViewRoot 和 DecorView 介绍 ViewRoot 对应于 ViewRootImpl 类,它...

  • View工作原理

    参考书籍:Android开发艺术探索注:京东链接https://item.jd.com/11760209.html...

  • View工作原理

    View工作原理 首先先来说明一下要掌握的知识 View绘制工作整体流程 Measure Layout Draw ...

  • View工作原理

    1、起步分析 在Activity启动分析中 知道,Activity的创建是在ActivityThread.perf...

  • View工作原理

  • View工作原理

    view有三大工作流程:测量、布局、绘制,分别对应着方法mesure、layout、draw ViewRoot和D...

  • View工作原理

    ViewRoot对应ViewRootImpl类,它是连接WindowManager和DecorView的纽带,Vi...

  • View的工作原理

    ViewRoot对应于ViewRootImpl类,是连接Windowmanager和DecorView的纽带,Vi...

网友评论

      本文标题:View的工作原理

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