(六)VIew的绘制过程-measure、layout、draw

Android View体系(八)从源码解析View的layout和draw流程 上一篇文章我们讲了View的measure的流程,接下来我们讲下View的layout和draw流程,如果你理解了View的measure的流程,那这篇文章自然就不在话下了。 阅读详情
View的measure过程由其measure方法来完成,measure是一个final类型的方法,不能重写,因此需在measure方法中调用View的onMeasure方法,在onMeasure方法中又调用setMeasuredDimension方法来设置View宽/高的测量值,该方法的参数是方法getDefaultSize(int size,int measureSpec),该方法在specMode为EXACTILY和AT_MOST模式下返回的大小是measureSpec中的specSize,就是View测量后的大小,在UNSPECIFIED模式下返回的size为getSuggestedMinimumWidth/Height()返回的值,该值为:若View没设置背景,返回minWidth属性设置的值,可为0,若有背景,为背景最小宽度与minWidth的最大值。
当自定义的view属性为wrap_content时,需如下重写onMeasure方法,否则wrap_content不生效,为match_parent效果。对于非wrap_content情形,沿用系统的测量值。



ViewGroup的measure过程,ViewGroup是一个抽象类,没有重写View的onMeasure()方法,但是它提供了一个measureChildren方法,在该方法中又调用了measureChild方法,该方法就是取出子元素的LayoutParams,通过getChildMeasureSpec来创建子元素的MeasureSpec,将之作为参数传给View的measure方法测量。

eg:在Activity启动是获得View的宽高。
     (1)在Activity/View的onWindowFoucsChanged方法中获取,此方法在Activity得到和失去焦点时都会被调用。
     (2)用View.post(runnable)将runnable投递到消息队尾,等待Looper调用时,View已经初始化好了。
     (3)通过ViewTreeObserver。
     (4)view.measure()。

Layout的作用是ViewGroup用来确定子元素的位置,当ViewGroup的位置确定后,它在onLayout中会遍历所有的子元素并调用其layout
方法,在layout中又会调用onLayout方法。layout确定View本身的位置,onLayout会确定子元素的位置。
layout方法的大致流程:通过setFrame方法设定四个顶点的位置,即确定自己的位置,之后调用onLayout方法确定子元素的位置,不过onLayout的具体实现和具体的布局有关,所以View和ViewGroup没有真正实现onLayout方法。
View的getMeasureWidth和getWidth方法的区别:默认情况下二者值相等,但getMeasureWidth形成于View的measure过程,而getWidth形成于View的layout过程。

Draw的过程是将View绘制到屏幕上。绘制过程在源码中分为六步,但一般只需四步:1.drawBackground(canvas)  3.onDraw(canvas) 4.dispatchDraw(canvas) (绘制过程的传递)6.onDrawScrollBars(canvas) 

自定义View:测量measure,布局layout,绘制draw 什么是View在Android的官方文档中是这样描述的:表示了用户界面的基本构建模块。一个View占用了屏幕上的一个矩形区域并且负责界面绘制和事件处理。手机屏幕上所有看得见摸得着的都是View。这一点对所有图形系统来说都一样,例如ios的UIView。View和Activity的区别我们之前学习过android的四大组件,Activity是四大组件中唯一一个用来和用户进行交互的组件。可以说Activ 阅读详情

相关推荐

Android进阶系列0—View的工作流程:measure,layout,draw小结

本文主要来自《Android开发艺术探索》和郭霖 《Android视图绘制流程完全解析,带你一步步深入了解View(二)》 两部分的综合理解。 本文只阐述流程,不讲述细节,大家可以结合上述两部分的细节看。如有问题,欢迎大家在评论区指出,谢谢! View由ViewRoot完成三大流程。在ActivityThread中,当Activity对象被创建完毕后,DecorView会被添加到Window中,

Kerwin的学习历程 1014

Android自定义view之measure、layout、draw三大流程

自定义view之view显示流程 一个view要显示出来,需要经过测量、布局和绘制这三个过程,本章就这三个流程详细探讨一下。View的三大流程具体分析起来比较复杂,本文不会从根源详细地分析,但是可以保证能达到实用的地步。

zuguorui的专栏 1万+

android6.0 Activity(五) Activity的测量(Measure)、布局(Layout)和绘制(Draw)

原文:http://blog.youkuaiyun.com/luoshengyang/article/details/8372924   http://blog.youkuaiyun.com/feiduclear_up/article/details/46772477。在这两者基础上改动了一下。 Android应用程序窗口的绘图表面在创建完成之后,我们就可以从上到下地绘制它里面的各个视图了,即各个UI元素

kc58236582的博客 4206

View的工作原理——三大流程(二)

ViewRoot和DecorView ViewRoot 它对应于ViewRootImpl类,它是链接WindowManager和DecorView的纽带,View的三大流程均是通过它完成的。在ActivityThread中,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和Decor对象建立关联: Veiw的绘制流程是ViewRoot的performTravers...

诺冰羽的虚拟世界 435

BLDC六步换相驱动实战:从霍尔真值表到PWM调速的代码实现

本文详细解析了BLDC六步换相驱动原理,从霍尔真值表解读到PWM调速的代码实现,提供了基于STM32的实战方案。重点介绍了霍尔信号解码、换相状态机设计以及PWM动态调速策略,帮助开发者快速掌握无刷电机驱动技术。

weixin_28273593的博客 210

FlashAttention 快速安装指南(避免长时间编译)

FlashAttention 编译太慢?本篇提供无需编译的预编译 wheel 快速安装方案,适配多版本 Python、PyTorch 和 CUDA,极大节省部署时间!

Junseer的博客 9718

Android中View绘制流程:measure过程,layout过程

基本概念以及流程在正式介绍之前,还是需要理解与UI相关的基本概念。 Activity:Activity包含一个Window,该Window在Activity的attach方法中通过调用PolicyManager.makeNewWindo创建; View:最基本的UI组件,表示屏幕上的一个矩形区域; DecorView:是Window中View的RootView,设置窗口属性; Window:表示顶层

benben8901的专栏 1429

4、I3C协议详解

I3C最初的设计目的是为移动设备创建一个能够使用多个传感器的单一接口。随着现代化移动设备对于传感器数量的增加以及对性能的提高,I2C和SPI已经达到了他们所能支持的临界点,而I3C的出现就是为了解决这一问题,I3C可以在同一根主线上支持更多的传感器设备,而且不会因为要支持中断或睡眠模式而增加额外的逻辑信号。I3C可以在更低功耗的情况下提供更快的传输速率,该特性的提升不止是对移动设备,对其他的嵌入式设备也都是很大的帮助。例如穿戴设备,需要在有限的物理空间中使用多个传感器并且要求更小的耗电。 一、简述..

迟子涵925的博客 2万+

View的measure、layout和draw,View的工作原理

View的measure、layout和draw,View的工作原理 View的工作原理 View的绘制流程从ViewRoot的performTraversals方法开始的,经过measure,layout和draw三个过程最终将一个View绘制出来,其中measure方法测量View的宽和高,layout确定View在父容器中的位置,draw则负责将View绘制在屏幕上 在perfromTra...

猫头的博客 776

2、实时DSP编程技术及其应用

本文详细介绍了实时数字信号处理(DSP)技术及其应用,涵盖三种流行的浮点DSP处理器系列的特点、开发工具和优化方法。通过具体的应用实例,如语音压缩、音乐信号处理和雷达信号处理,展示了如何在实际项目中应用这些技术,帮助工程师提高系统的性能和可靠性。

cicd6pipeline的博客 838

【SpringBoot 3.x 第56节】再见 Feign?原生 HTTP 接口强势上位,这才是微服务调用的正确姿势!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1017

Android开发学习笔记——自定义View(一)View三大工作流程measure、layout和draw

Android开发学习笔记——自定义View(一)View基础知识View基本介绍ViewRoot和DecorViewView的三大工作流程measure过程view的measure过程MeasureSpecMeasureSpec和LayoutParams的对应关系layout过程draw过程 Android已经为我们提供了众多基础控件,我们可以通过这些控件创建出多种多样的界面布局,但是,在实际开发中,如果界面元素过于复杂有可能无法使用基础控件实现,此时就需要我们根据需求自定义view。在正式开始学习自定义

qq_36425800的博客 957

Ghost卷积原理与构建YOLOv11的GhostNet变体

本文探讨了在边缘设备部署YOLOv11时使用Ghost卷积进行模型轻量化的实践经验。针对Jetson Nano的4GB内存限制,作者通过替换Backbone中的3x3标准卷积为Ghost卷积,实现了参数减少28%、推理速度提升38%,仅损失1.1%mAP的优化效果。文章详细介绍了Ghost卷积的实现原理、在YOLOv11中的具体替换策略,以及训练调参和部署优化的关键技巧。作者强调轻量化是计算效率与模型性能的权衡,建议工程团队保留原模型和Ghost变体两个版本,根据实际需求灵活切换。Ghost卷积的核心价值在

as1225120794的博客 169

View的绘制流程-measure、layout、draw

承接上文——Window、DecorView、ViewRootImp详解 我们打开一个Activity后,在ActivityThread中 的performLaunchActivity方法中,回调Activity onCreate()之前 会先调用Activity.attach(),这个方法中初始化了PhoneWindow和WindowManager对象。然后在resume之前,会将DecorView和WindowManager关联,WindowManager的具体实现类WindowManagerImpl把

尤教授的博客 2258

图像处理入门007:图像处理中的数学基础:线性代数与卷积

一种:把 OpenCV 当黑盒,调用,效果不对就乱调参数;另一种:理解每个像素是怎么被周围邻域"加权平均"的,理解核翻转、边界填充、stride 的含义。前者能干活,后者能解难题。一旦遇到自定义核(比如 ISP 上的锐化)、深度学习反向传播、医学图像重建,你就必须把卷积、相关、矩阵乘法这些基本功捡回来。线性代数三件套:向量点积、矩阵乘法、线性变换;2D 卷积的数学定义:核翻转、滑动窗口、边界填充。并手写一个,验证它与和的结果完全一致(误差 < 1e-9)。f∗gn∑m−∞∞f。

专注:太空算力、AI infra、异构调度、大模型成本工程 385

【教程4>第6章>第15节】 基于I+jQ复数信号的LS信道估计和均衡实现1——matlab仿真分析,QPSK为例

在基于QPSK调制的通信系统中,LS信道估计和均衡是用于补偿信道失真、提高信号传输质量的重要技术。以下将详细介绍基于I+jQ复数信号的 LS 信道估计和均衡的实现原理与过程。可以看到,通过线性插值之后,QPSK信号的星座图可以模糊的看到四个星座点(图2),通过非线性插值之后,可以清晰的看到QPSK的四个星座点(图3)。可以看到,信道均衡显著提高了通信系统的可靠性和有效性。

FPGA/MATLAB学习教程/源码/项目合作开发 657

View绘制流程2-安卓是如何执行measure/layout/draw三个绘制流程

讲解安卓是如何执行到measure/layout/draw这三个绘制流程的

分享+记录 1739

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

带你从源代码详细分析View的绘制过程

转载注明出处:http://blog.youkuaiyun.com/xiaohanluo/article/details/52084105 1. View简介 &nbsp; &nbsp; &nbsp; &nbsp;View类是Android中各种交互式组件的基类,显示在屏幕上的视图由一个或多个View组成,它们排列在一个View树中,我们可以向树中添加新的View或者View树。 2. Vi...

王三的专栏 4547

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android View绘制流程:Measure/Layout/Draw

Android View绘制流程:Measure/Layout/Draw一.Measure二.Layout三.Draw总结 对view绘制流程做一个简单的记录,纯个人笔记。 一.Measure 测量控件: 递:开始测量,由最顶层的父控件将MeasureSpec(测量布局的规则,包含测量大小和测量模式两种属性)向上传递到子控件,子控件开始测量,子控件根据测量策略计算出自身的MeaseureSpec...

欢迎来到Cozing的博客 442

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

View绘制流程之measure过程

概述 View的绘制包括measure,layout,draw三个过程,即测量,布局,绘制。measure是对view的宽高进行测量,layout是确定view的四个顶点,即确定view的位置,draw是将最终的view绘制到屏幕上。 measure过程 如果只是一个单一的view,只需要对自身进行measure就足够了,但如果是一个viewgroup,除了对自身进行measure外还需要遍历它所...

Gentleman Googoo的博客 579

View 的 layout 布局和 draw 绘制过程

上篇文章View 的测量分析了 View 的工作原理中最复杂的测量过程,接着测量过程的是布局和绘制的过程,这里两个过程相对比较简单,所以放到一篇文章中来写View 的测量过程中,确定了 View 的测量宽高的信息,布局过程则是为了确定 View 在其父 View 中的位置以及 ViewGroup 确定其所有子 View 元素的位置;布局结束后会执行绘制过程,绘制过程将 View 需要显示的内容绘制到

任雪龙的博客 719

View的工作原理:measure、layout、draw

View的工作原理:measure、layout、draw当执行ViewRootImpl的setView时,会执行requestLayout方法,并调用scheduleTraversal方法,然后开始View的异步刷新。异步刷新过程由ViewRootImpl的performTraversal方法完成(该方法有六百多行=_=),在performTraversal方法中又会依次调用performMeas

iyl2uw的博客 357

Measure、Layout和Draw过程分析

Android应用程序窗口的绘图表面在创建完成之后,我们就可以从上到下地绘制它里面的各个视图了,即各个UI元素了。不过在绘制这些UI元素之前,我们还需要从上到下地测量它们实际所需要的大小,以及对它们的位置进行合适的安排,即对它们进行合适的布局。 Android应用程序窗口请求SurfaceFlinger服务创建了一个绘图表面之后,就可以接着请求为该绘图表面创建图形缓冲区,而当Android应用程序窗口往这些图形缓冲区填充好UI数据之后,就可以请求SurfaceFlinger服务将它们渲染到硬件帧缓冲区中去,

旭哥的专栏 983

SurfaceFlinger学习笔记(六)之View Layout Draw过程分析

视图的绘制工作大概分为Measure、Layout和Draw三个主要的流程。而启动这些流程的一个入口则是ViewRootImpl类的performTraversals,具体请参考应用启动流程 DecorView在PhoneWindow中被创建,在Activity的onResume方法回调的时候继而调用Activity的makeVisible()方法,Activity对应的PhoneWindow对象才被WindowManager添加 WindowManager.addView()->WindowMan

zhzhangnews的博客 1541

view的绘制流程

一、view树的绘制流程 measure--->layout--->draw measure 1、ViewGroup.LayoutParams 指定部件的长宽 2、MeasureSpec 32位的int值 前两位代表模式 后30位测量规格的大小 layout draw invalidate()请求android系统 如果大小没有发生变化 就不会调用layout放置这个过程 requestLayout() 当布局发生变化时 希望重新测量尺寸大小 就会触发 mea

3976

View的绘制流程

view的绘制流程主要为三个阶段View与window的逻辑结构如图所示:ViewRootImpl(替代ViewRoot)类,是连接WindowMannager和DecorView的纽带,View的三大流程均是通过ViewRoot完成的,当activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView建立关联,在ViewRootImpl里的performTraversals()进行分发。

xiaowang_lj的博客 3608
上一篇: (五)View的测量 MeasureSpec类
下一篇: (七)android的绘图机制&&Drawable
kerrysimon
博客等级 码龄11年 3粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值