美文网首页
Android开发(15)——深入源码了解视图创建流程

Android开发(15)——深入源码了解视图创建流程

作者: 让时间走12138 | 来源:发表于2021-03-30 19:46 被阅读0次

    本节内容

    1.View、ViewGroup和ViewRootImpl简介

    2.View和ViewGroup的关系

    3.performTraversals测量尺寸

    4.布局和绘制

    一、View、ViewGroup和ViewRootImpl简介
    1.自定义View
    • (1)为什么需要自定义View:系统的View满足不了我们实际的需求。
    2.View:单个视图,最小单元。一个View占据了屏幕的一块矩形区域,它负责绘制和事件处理。
    3.ViewGroup:容器,可以承载单个或多个子视图。一个ViewGroup是一个特殊的View,它可以容纳其他的View(称为children)。它是布局(layouts)和视图容器(view containers)的base class,也就是说前面两个要继承ViewGroup。它还定义了一个LayoutParams类,它是为布局参数服务的。(任何一个容器都有自己的布局参数。)
    4.ViewRootImpl:View的一个实现。它是视图层级里面的最顶层,实现了视图(View)和窗口管理器(windowManager)之间的协议,大多情况都是一个内部实现,不用去管。
    二、View和ViewGroup的关系
    1.ViewGroup里面可以包含多个ViewGroup和View,但是View是最小单元,不能再包裹其他控件了。
    image.png
    三、performTraversals测量尺寸
    视图创建流程图.png
    1.PerformMeasure:测量自己的宽和高,在这个方法里面会调用view.measure,本质上还是调用view的onMeasure方法。
    2.如果是单个view,只需要测量一下自己有多大即可。
    3.如果是ViewGroup,里面又有子视图(view),它调用performMeasure方法,容器的宽高由子视图来决定。这个时候要先知道子视图的尺寸,才能确定容器的尺寸。
    四、布局和绘制
    1.测量完ViewGroup的宽高之后,调用performLayout方法,也就是调用view对应的onLayout方法,重写这个方法,确定容器的位置。
    2.canvas:一个用于绘制的类,可以理解为画板。
    3:draw:系统自带的绘制的方法,它有很多绘制的步骤,必须按照正常的合适的顺序来执行。
    • 1.绘制背景,setBackgroundColor
    • 2.画具体的内容 onDraw(),重写这个方法。
    • 3.画子视图(如果总体是一个容器的话,才有这个步骤)调用dispatchDraw()方法
    • 4.画一点装饰性的东西,通过onDrawForeground()方法来实现。
    4.Paint:画笔。
    5.Path:形状。

    相关文章

      网友评论

          本文标题:Android开发(15)——深入源码了解视图创建流程

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