博客
关于我
Android面试11-View的绘制流程
阅读量:659 次
发布时间:2019-03-15

本文共 1800 字,大约阅读时间需要 6 分钟。

Android View 绘制流程

View在Android中的绘制流程主要包括三个关键阶段:measure(测量)、layout(布局)、draw(绘制)。这些阶段通过ViewRootImpl类进行管理和执行,确保视图能够正确显示在屏幕上。

ViewRootImpl 的作用

ViewRootImpl(即替代ViewRoot)类是View绘制流程的核心,主要通过performTraversals方法分发三大流程:measure、layout、draw。

performTraversals 的执行流程

performTraversals方法执行以下操作:

  • measure阶段

    首先调用performMeasure,顶级View的measure方法会被执行。在measure过程中,View及其子容器会多次递归调用measure方法,最终完成整个View树的测量。

  • layout阶段

    接下来调用performLayout,同样从顶级View开始,调用其layout方法。View及其子容器会递归执行layout过程,确定View的宽度和高度,最终定义View在屏幕上的位置。

  • 绘制阶段

    最后调用performDraw,顶级View的draw方法被执行。draw过程由View的onDraw方法启动,之后会调用dispatchDraw方法,实现子View的绘制。

  • 通过以上步骤,ViewRootImpl确保了View的测量、布局和绘制,确保其能够按照预期显示在屏幕上。

    View绘制流程的关键实现

    measure阶段的作用

    measure阶段决定了View的宽高。每个View和容器都会测量(measure)自身,获取测量后的宽度和高度(via getMeasuredWidth、getMeasuredHeight)。这种测量通常与布局相关联,为后续布局阶段提供重要信息。

    layout阶段的作用

    layout阶段通过View的layout方法确定View的最终位置。每个View会根据其测量结果布局(layout),计算自身的左、右、上、下位置,并确定其大小。这些信息被存储后,View的最终宽度和高度也随之确定(via getWidth、getHeight)。

    draw阶段的作用

    draw阶段负责View的显示内容。startNiceRoundImageButton通过onDraw方法绘制自身,然后通过dispatchDraw调用子View的绘制。此外,还会绘制背景、滚动条等视觉元素,确保整个界面呈现正确。

    Activity与Window的关联

    在Android中,Activity负责与应用程序的生命周期管理,Window则作为视图绘制的容器。通过PhoneWindow类实现最终的视图绘制,确保用户界面能够正确显示。

    Activity attach 时的关联

    当Activity的attach方法被调用时,便初始化了PhoneWindow对象,同时将WindowManagerService和Window层建立关联。随后,通过setContentView调用PhoneWindow的绘制逻辑,加载布局文件到DecorView中,便完成了UI的初始化。

    View 调用链

    从देखिन初始:

  • scheduleLaunchActivity

    调用handleLaunchActivity,初始化WindowManagerService。

  • performLaunchActivity

    执行Activity.attach,创造PhoneWindow对象并绑定WindowManagerService。

  • 绘制iew

    通过setContentView调用PhoneWindow绘制逻辑,实现屏幕内容的呈现。

  • 绘制流程简介

    View的绘制流程主要包含三个阶段:

  • measure(测量)

    确定View的宽度和高度,为布局奠定基础。

  • layout(布局)

    根据测量结果计算View的最终位置并确定大小。

  • draw(绘制)

    绘制View及其子容器,显示最终用户界面。

  • 结论

    View的绘制流程通过measure、layout、draw三步完成,确保了定义型用户体验。这些步骤由ViewRootImpl负责,通过performTraversals方法分发,确保每个子View按顺序处理,实现规范计算和正确显示。

    转载地址:http://fydmz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现两数之和问题(附完整源码)
    查看>>
    Objective-C实现中文模糊查询(附完整源码)
    查看>>
    Objective-C实现串口通讯(附完整源码)
    查看>>
    Objective-C实现串逐位和(附完整源码)
    查看>>
    Objective-C实现主存储器空间的分配和回收(附完整源码)
    查看>>
    Objective-C实现乘方运算---m的n次方(附完整源码)
    查看>>
    Objective-C实现二叉树遍历算法(附完整源码)
    查看>>
    Objective-C实现二进制和算法(附完整源码)
    查看>>
    Objective-C实现二进制补码算法(附完整源码)
    查看>>
    Objective-C实现互斥锁同步执行两个线程函数(附完整源码)
    查看>>
    Objective-C实现交易密码算法(附完整源码)
    查看>>
    Objective-C实现亨元模式(附完整源码)
    查看>>
    Objective-C实现人工势场法(附完整源码)
    查看>>
    Objective-C实现代理服务器(附完整源码)
    查看>>
    Objective-C实现以递归的形式MatrixExponentiation矩阵求幂算法 (附完整源码)
    查看>>
    Objective-C实现优先队列算法(附完整源码)
    查看>>
    Objective-C实现伽玛Gamma函数(附完整源码)
    查看>>
    Objective-C实现位置型pid算法(附完整源码)
    查看>>
    Objective-C实现低通滤波器(附完整源码)
    查看>>
    Objective-C实现使用 ziggurat() 作为 OpenMP 并行程序中的随机数生成器 (RNG)(附完整源码)
    查看>>