Android view 基本的绘制流程

ops/2024/12/29 10:48:43/

回答思路

概述
View 的绘制流程是从 ViewRootImpl 的 performTraversals() 方法开始的,分为 测量(Measure)、布局(Layout) 和 绘制(Draw) 三个阶段。
它是一个递归的过程,从根 View(通常是 DecorView)向下传递到每个子 View,最终完成整个视图树的绘制。

测量阶段:通过 measure() 和 onMeasure(),计算每个 View 的宽高。

  • measure():调用 View 的测量逻辑。
  • onMeasure():子类通过重写该方法,计算自身尺寸并调用 setMeasuredDimension() 保存结果。

布局阶段:通过 layout() 和 onLayout(),确定每个 View 的位置。

  • layout():由父 View 调用,确定子 View 的位置。
  • onLayout():ViewGroup 负责对子 View 逐个进行布局。

绘制阶段:通过 draw()、onDraw() 和 dispatchDraw(),将 View 绘制到屏幕上。

  • draw(Canvas):包含整个绘制流程。
  • onDraw(Canvas):绘制当前 View 的内容,子类可重写。
  • dispatchDraw(Canvas):负责绘制子 View。

绘制顺序:绘制背景。绘制自身内容(onDraw)。绘制子 View(dispatchDraw)。绘制滚动条等装饰。

补充细节

  • ViewGroup 特殊性:ViewGroup 需要遍历子 View 进行测量、布局和绘制。
  • 无状态特性:View 本身是无状态的,状态管理需要依靠 invalidate() 或 requestLayout() 等方法触发重绘或重新布局。
  • 性能优化:避免过度绘制(Overdraw)。自定义 View 时合理使用 onMeasure() 和 onDraw()。

如果需要深入,面试官可能会问:

  • MeasureSpec 的具体含义。
  • 如何优化自定义 View 的绘制流程。
  • 如何理解 View 的无状态特性。

http://www.ppmy.cn/ops/145902.html

相关文章

ch.h:38:10:致命错误: rpc/rpc.h:没有那个文件或目录38 I#include <rpc/rpc.h>

1.报错如下 编译器在编译时找不到 rpc/rpc.h 头文件 2.解决报错 通过确认问题、检查库安装、配置环境变量、查看实际路径、查阅解决方案并实施,在检查 RPC 库已安装并配置环境变量无效后,通过查阅资料发现问题源于路径不一致,最终将 /usr/i…

【微信小程序】4plus|搜索框-历史搜索 | 我的咖啡店-综合实训

升级版1-清空全部的再次确认 实现功能: 历史搜索记录展示-历史搜索记录展示10条点击跳转-点击历史搜索记录可同步到搜索框并自动搜索全部删除-可一次性全部删除历史搜索记录全部删除-有再次确认操作展示 进行搜索后留下搜索记录 点击垃圾桶图标,显示【清空全部】 点击【清…

【插件推荐】SQL 注入探测插件-DetSql

简介 DetSql是基于 BurpSuite Java 插件 API 开发的 SQL 注入探测插件,主要作用为快速从 http 流量中筛选出可能存在 SQL 注入的请求,在尽可能减少拦截的情况下提高 SQL 注入测试效率。 安装 下载地址:https://github.com/saoshao/DetSql/…

1.指针的基本介绍

一、RAM与变量所占字节 🍉 要理解指针,首先要理解不同的数据类型或者不同的变量在计算机的内存中是如何存储的? 计算机的内存(RAM 随机存储器)段或区,在内存中都代表一个字节,作为一个典型的内…

中关村科金海外外呼机器人如何通过大数据分析帮助跨境电商实现精准营销?

精准营销是企业提升市场竞争力、优化客户体验和实现可持续增长的关键策略。与传统的广撒网式营销不同,精准营销通过数据分析、人工智能和机器学习等先进技术,深入了解客户的偏好、行为和需求,从而提供高度个性化的产品和服务推荐。中关村科金…

CSharp: Oracle Stored Procedure query table

存储过程查询postgreSQL,Oracle 和sql server,Mysql 有区别。程序调用也是有区别。 oracle sql script: CREATE OR REPLACE PROCEDURE procSelectSchool(paramSchoolId IN char,p_cursor OUT SYS_REFCURSOR ) AS BEGINOPEN p_cursor FORSELECT *FROM SchoolWHERE SchoolId p…

计算机网络实验室建设方案

一、计算机网络实验室拓扑结构 计算机网络综合实验室解决方案,是面向高校网络相关专业开展教学实训的综合实训基地解决方案。教学实训系统采用 B/S架构,通过公有云教学实训平台在线学习模式,轻松实现网络系统建设与运维技术的教学…

sql group by 多个字段例子

有表如下; 获取某年份、某地区、某产品的销售总额, 或者根据需要把字段顺序换一下; insert into sales (product, year, region, amount) values (飞机,2000,东部,5); insert into sales (product, year, region, amount) values (飞机,2001,…