当前位置: 首页 > news >正文

自定义View之Measure(二)

measure 用来测量 View 的宽和高,它的流程分为 View 的 measure 流程和 ViewGroup 的measure流程,只不过ViewGroup的measure流程除了要完成自己的测量,还要遍历地调用子元素的measure()方法。

上一回说到performMeasure方法前会得到DecoreView的MeasureSpec接着调用DecoreView的measure方法携带宽高这两个MeasureSpec做处理。

View的onMeasure前会计算好View的MeasureSpec接着调用onMeasure传递进去,ViewGroup中也是如此遍历子View得到子View的MeasureSpec接着在调用onMeasure。

那么接下来是干什么?,得到View自身的MeasureSpec就可以直接赋值了吗》:

首先判断是否有无背景:无背景情况使用view最小宽度(对应于View的mMinWidth属性);有背景情况下使用背景drawable的intrinsicwidth固有宽度(mBackground.getMiniumWidth)

setMinimumWidth方法
public void setMinimumWidth(int minWidth){//保存mMinWidth=minWidth;//重新布局该ViewrequestLayout();
}
getMiniumWidth方法
public int getMiniumWidth(){//获取该属性得到的的是这个Drawable的固有宽度final int intrinsicWidth=getIntrinsicWidth();return intrinsicWidth>0?intrinsicWidth:0
}

拿到最小宽高后结合MeasureSpec的Mode做处理:

如果SpecMode是UNSPECIFIED那么就返回这个最小值,如果是ATMOST或者EXACTLY返回MeasureSpec中自带的宽高也就是当前View的SpecSize

这下 宽高就知道了,但是这个宽高是原始的宽高

这里需要针对padding和margin进行在处理View的宽高,最终的宽高其实就是View真实的宽高。

对应于ViewGroup

其拿到自身的MeasureSpec后,需要进行生成子View的MeasureSpec,循环遍历可见的子view并调用measurechildren方法测量每个子view, 该方法传入需要测量的子view实例还有自身的measurespec因为测量子View的真实宽高是通过父view的measurespec和自己的宽高结合处理的

父view的specmode为atmost时:

1.子view给出来了具体的宽度 传给子view的宽度就是具体的宽高spec采用精确模式

2.子viewmatch 宽度为父view的宽度减去padding,mode为精确模式

3.子元素的MeasureSpec属性也为AT_MOST,它的SpecSize值为父容器的SpecSize减去padding的值这和子元素设置LayoutParams属性为MATCH_PARENT效果是一样的,但是其Mode是ATMOST。为了解决这个问题,需要在LayoutParams属性为WRAP_CONTENT时指定一下默认的宽和高

ViewGroup并没有提供onMeasure 方法,而是让其子类来各自实现测量的方法,究其原因就是ViewGroup有不同布局的需要,很难统一

原文:自定义View之Measure(二) - 掘金 (juejin.cn)

相关文章:

自定义View之Measure(二)

measure 用来测量 View 的宽和高,它的流程分为 View 的 measure 流程和 ViewGroup 的measure流程,只不过ViewGroup的measure流程除了要完成自己的测量,还要遍历地调用子元素的measure()方法。 上一回说到performMeasur…...

SQL注入学习--GTFHub(布尔盲注+时间盲注+MySQL结构)

目录 布尔盲注 手工注入 笔记 Boolean注入 # 使用脚本注入 sqlmap注入 使用Burpsuite进行半自动注入 时间盲注 手工注入 使用脚本注入 sqlmap注入 使用Burpsuite进行半自动注入 MySQL结构 手工注入 sqlmap注入 笔记 union 联合注入,手工注入的一般步骤 …...

Kubernetes学习-概念2

参考:关于 cgroup v2 | Kubernetes 关于 cgroup v2 在 Linux 上,控制组约束分配给进程的资源。 kubelet 和底层容器运行时都需要对接 cgroup 来强制执行为 Pod 和容器管理资源, 这包括为容器化工作负载配置 CPU/内存请求和限制。 Linux 中…...

StyleGAN:彻底改变生成对抗网络的艺术

一、介绍 多年来,人工智能领域取得了显着的进步,其中最令人兴奋的领域之一是生成模型的发展。这些模型旨在生成与人类创作没有区别的内容,例如图像和文本。其中,StyleGAN(即风格生成对抗网络)因其创建高度逼…...

黑马程序员微服务第四天课程 分布式搜索引擎1

分布式搜索引擎01 – elasticsearch基础 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: …...

向量以及矩阵

0.前言 好了那我们新的征程也即将开始,那么在此呢我也先啰嗦两句,本篇文章介绍数学基础的部分,因为个人精力有限我不可能没一字一句都讲得非常清楚明白,像矩阵乘法之类的一些基础知识我都是默认你会了(还不会的同学推…...

9.程序的机器级代码表示,CISC和RISC

目录 一. x86汇遍语言基础(Intel格式) 二. AT&T格式汇编语言 三. 程序的机器级代码表示 (1)选择语句 (2)循环语句 (3)函数调用 1.函数调用命令 2.栈帧及其访问 3.栈帧的…...

《硅基物语.AI写作高手:从零开始用ChatGPT学会写作》《从零开始读懂相对论》

文章目录 《硅基物语.AI写作高手:从零开始用ChatGPT学会写作》内容简介核心精华使用ChatGPT可以高效搞定写作的好处如下 《从零开始读懂相对论》内容简介关键点书摘最后 《硅基物语.AI写作高手:从零开始用ChatGPT学会写作》 内容简介 本书从写作与ChatG…...

【2016年数据结构真题】

已知由n&#xff08;M>2&#xff09;个正整数构成的集合A{a<k<n},将其划分为两个不相交的子集A1 和A2&#xff0c;元素个数分别是n1和n2&#xff0c;A1和A2中的元素之和分别为S1和S2。设计一个尽可能高效的划分算法&#xff0c;满足|n1-n2|最小且|s1-s2|最大。要求…...

创作者等级终于升到4级了

写了两个月的文章&#xff0c;终于等到4级了。发文纪念一下&#xff1a;...

Games104现代游戏引擎笔记 面向数据编程与任务系统

Basics of Parallel Programming 并行编程的基础 核达到了上限&#xff0c;无法越做越快&#xff0c;只能通过更多的核来解决问题 Process 进程 有独立的存储单元&#xff0c;系统去管理&#xff0c;需要通过特殊机制去交换信息 Thread 线程 在进程之内&#xff0c;共享了内存…...

系列三、GC垃圾回收【总体概览】

一、GC垃圾回收【总体概览】 JVM进行GC时&#xff0c;并非每次都对上面的三个内存区域&#xff08;新生区、养老区、元空间/永久代&#xff09;一起回收&#xff0c;大部分回收的是新生区里边的垃圾&#xff0c;因此GC按照回收的区域又分为了两种类型&#xff0c;一种是发生在新…...

无线WiFi安全渗透与攻防(N.3)WPA破解-创建Hash-table加速并用Cowpatty破解

WPA破解-创建Hash-table加速并用Cowpatty破解 WPA破解-创建Hash-table加速并用Cowpatty破解1.Cowpatty 软件介绍2.渗透流程1.安装CoWPAtty2.抓握手包1.查看网卡2.开启监听模式3.扫描wifi4.抓握手包5.进行冲突模式攻击3.STA重新连接wifi4.渗透WPA wifi5.使用大字典破解3.hash-ta…...

golang 动态库

目录 1. golang 动态库2. golang 语言使用动态库、调用动态链接库2.1. Go 插件系统2.2. 动态加载的优劣2.3. Go 的插件系统&#xff1a;Plugin2.4. 插件开发原则2.4.1. 插件独立2.4.2. 使用接口类型作为边界2.4.3. Unix 模块化原则2.4.4. 版本控制 2.5. 插件开发示例2.5.1. 编写…...

Python的2042小游戏及其详解

源码&#xff1a; import random import os# 游戏界面尺寸 SIZE 4# 游戏结束标志 GAME_OVER False# 初始化游戏界面 board [[0] * SIZE for _ in range(SIZE)]# 随机生成一个初始方块 def add_random_tile():empty_tiles [(i, j) for i in range(SIZE) for j in range(SIZ…...

怎么去掉邮件内容中的回车符

上图是Outlook 截图&#xff0c;可见1指向的总有回车符&#xff1b; 故障原因&#xff1a; 不小心误按了箭头4这个选项&#xff1b; 解决方法&#xff1a; 点击2箭头确保tab展开&#xff1b; 点击3以找到箭头4. 取消勾选或者多次点击&#xff0c;即可解决。...

Git-概念与架构

GIT-概念与架构 一、背景和起源二、版本控制系统1.版本控制分类1.1 集中式版本控制1.2 分布式版本控制 2.Git和SVN对比2.1 SVN2.2 GIT 三、GIT框架1.工作区&#xff08;working directory&#xff09;2.暂存区&#xff08;staging area&#xff09;3.本地仓库&#xff08;local…...

android 数独小游戏 经典数独·休闲益智

一款经典数独训练app 标题资源下载 &#xff08;0积分&#xff09;https://download.csdn.net/download/qq_38355313/88544810 首页页面&#xff1a; 1.包含有简单、普通、困难、大师四种难度的数独挑战供选择&#xff1b; 记录页面&#xff1a; 1.记录用户训练过的数独信息&…...

GAT里面的sofamax函数的实现:

1.sofamx 公式&#xff1a; 2. GAT里的sofamax函数的实现&#xff1a; 1. 因为指数在x轴正轴爆炸式地快速增长&#xff0c;如果zi比较大&#xff0c;exp⁡(zi)也会非常大&#xff0c;得到的数值可能会溢出。溢出又分为下溢出&#xff08;Underflow&#xff09;和上溢出&#x…...

Idea 编译SpringBoot项目Kotlin报错/Idea重新编译

原因应该是一次性修改了大量的文件, SpringBoot项目启动Kotlin报错, Build Project也是同样的结果, 报错如下 Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.1.13. Build-&…...

AI专著写作工具深度剖析,从构思到完稿全程高效助力

创新是学术专著的核心所在&#xff0c;也是写作过程中的一大挑战。一本优秀的专著不仅应当仅仅是以往研究成果的简单集合&#xff0c;而是要提出贯穿整本书的全新观点、理论框架或研究方法。在庞大的学术文献中&#xff0c;发现未被充分研究的空白并不容易——有时是因为选题被…...

别再搞混了!Docker部署Redis Stack时,选redis/redis-stack还是redis/redis-stack-server?

Redis Stack镜像选择指南&#xff1a;开发与生产环境的最佳实践 在容器化技术普及的今天&#xff0c;Docker已成为部署Redis Stack的首选方案。但面对官方提供的两个相似镜像——redis/redis-stack和redis/redis-stack-server&#xff0c;许多开发者常陷入选择困境。本文将深入…...

别再死记硬背了!用这个动画+仿真,5分钟搞懂CMOS反相器到底怎么‘反’的

别再死记硬背了&#xff01;用动画仿真5分钟搞懂CMOS反相器的翻转奥秘 第一次翻开数字电路教材时&#xff0c;那个由PMOS和NMOS组成的对称结构总让我困惑——为什么PMOS必须在上方&#xff1f;为什么输入高电平反而输出低电平&#xff1f;直到我在实验室里用仿真软件亲眼看到电…...

AI 创作者指南:附录工具包

📦 附录工具包 “工具不是答案,但能让你更快找到答案。” 第五部分压轴刚聊完“人类永远有护城河”,你现在从灵感到商业化、从伦理到未来,全链路都打通了,是不是心里满满的成就感?😊 来,重头戏到了——📦 附录工具包! 这可是我给你准备的“创作百宝箱”,全都是现…...

Plumbum部署指南:生产环境配置、安全与监控完整方案

Plumbum部署指南&#xff1a;生产环境配置、安全与监控完整方案 【免费下载链接】plumbum Plumbum: Shell Combinators 项目地址: https://gitcode.com/gh_mirrors/pl/plumbum Plumbum作为Python Shell Combinators库&#xff0c;为生产环境提供了强大的命令行执行和远程…...

Photon光影包:颠覆级Minecraft视觉体验的沉浸式渲染方案

Photon光影包&#xff1a;颠覆级Minecraft视觉体验的沉浸式渲染方案 【免费下载链接】photon A gameplay-focused shader pack for Minecraft 项目地址: https://gitcode.com/gh_mirrors/photon3/photon 在像素化的方块世界中&#xff0c;如何突破视觉边界实现电影级画面…...

intv_ai_mk11实际作品:10组真实业务提示词生成结果(含政务/教育/金融)

intv_ai_mk11实际作品&#xff1a;10组真实业务提示词生成结果&#xff08;含政务/教育/金融&#xff09; 1. 模型能力概览 intv_ai_mk11是基于Llama架构的中等规模文本生成模型&#xff0c;特别适合处理通用问答、文本改写、解释说明等任务。通过本地部署的Web界面&#xff…...

技术深度解析:logitech-pubg项目实现PUBG后坐力控制的Lua脚本架构设计

技术深度解析&#xff1a;logitech-pubg项目实现PUBG后坐力控制的Lua脚本架构设计 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在竞技射击游戏…...

ENVI实战:利用传感器波谱响应函数实现光谱曲线精准重采样

1. 为什么需要光谱重采样&#xff1f; 在遥感数据分析中&#xff0c;我们经常会遇到一个头疼的问题&#xff1a;不同传感器采集的光谱数据分辨率不一致。比如实验室用光谱仪测量的叶片反射率可能有上千个波段&#xff0c;而Landsat-8卫星只能获取11个波段的数据。这就好比用高清…...

【Java等保三级最小可行合规方案】:从Spring Boot 2.7到3.2,仅需修改8处配置+3个注解

第一章&#xff1a;Java等保三级合规的底层逻辑与演进脉络等保三级&#xff08;GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》&#xff09;对Java应用系统提出了覆盖“安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心”五大层面的强制性约…...