当前位置: 首页 > 编程日记 > 正文

关于View测量中的onMeasure函数

在自定义View中我们通常会重写onMeasure,下面来说说这个onMeasure有什么作用 onMeasure主要用于对于View绘制时进行测量

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
复制代码
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
}
复制代码

setMeasuredDimension是设置它的宽度和高度

public static int getDefaultSize(int size, int measureSpec) {int result = size;int specMode = MeasureSpec.getMode(measureSpec);int specSize = MeasureSpec.getSize(measureSpec);switch (specMode) {case MeasureSpec.UNSPECIFIED:result = size;break;case MeasureSpec.AT_MOST:case MeasureSpec.EXACTLY:result = specSize;break;}return result;
}
复制代码

上面用来获取宽高的函数,可以看出这里有3种模式: UNSPECIFIED 这种模式它的result就是size, size是通过getSuggestedMinimumWidth()和getSuggestedMinimumHeight()获取的, 看看getSuggestedMinimumWidth

protected int getSuggestedMinimumWidth() {return (mBackground == null) ? mMinWidth : max(mMinWidth, mBackground.getMinimumWidth());
}
复制代码

通常mBackground是通过外部setBackgroundDrawable调用赋值的. mMinWidth也可以通过外部负责,也可以通过属性赋值

case R.styleable.View_minWidth:mMinWidth = a.getDimensionPixelSize(attr, 0);break;
复制代码
public void setMinimumWidth(int minWidth) {mMinWidth = minWidth;requestLayout();}
复制代码

通常UNSPECIFIED是不会调用到的.所以我们无需过度关心它的情况. AT_MOST AT_MOST对于xml属性中的wrap_content, 就是适用view内容的大小,但是自定义view情况设置wrap_content通常会传入填满父控件的specSize。这点从这里可以看出

case MeasureSpec.AT_MOST:
case MeasureSpec.EXACTLY:
result = specSize;
复制代码

这显然不是我们希望看到的,所以自定义需要重写onMeasure,来对应这种情况 EXACTLY EXACTLY模式对应制定的宽高和match_partent, 用来精确的设定宽高. 接下来说说怎么重写onMeasure这个函数,重写onMeasure主要是为了争对设置wrap_content,自定义view填充父容器的情况,所以我们只是争对MeasureSpec.AT_MOST这种情况.

private int measureWidth(int measureSpec){int result = 0;int specMode = MeasureSpec.getMode(measureSpec);int specSize = MeasureSpec.getSize(measureSpec);switch (specMode) {case MeasureSpec.UNSPECIFIED:result = 200;break;case MeasureSpec.AT_MOST:result = Math.min(result,specSize);break;case MeasureSpec.EXACTLY:result = specSize;break;}return result;
}
复制代码

measureHeight和measureWidth是一样的,注意Math.min(result,specSize)这段代码,用来防止实际父控件的大小比指定的200要小,最终调用:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(measureWidth(widthMeasureSpec),measureHeight(heightMeasureSpec));
}
复制代码

转载于:https://juejin.im/post/5cbdbcc4e51d456e51614ac5

相关文章:

zabbix二次开发之从mysql取值在运维平台js图表展现

前沿:集群控制平台已经要慢慢的灰度上线了,出问题的时候,才找点bug,时间有点空闲。正好看了下zabbix的数据库,产生了自己想做一套能更好的展现zabbix的页面。更多内容请到我的个人的博客站点,blog.xiaorui.…

概率论中高斯分布(正态分布)介绍及C++11中std::normal_distribution的使用

高斯分布:最常用的分布是正态分布(normal distribution),也称为高斯分布(Gaussian distribution):正态分布N(x;μ,σ2)呈现经典的”钟形曲线”的形状,其中中心峰的x坐标由μ给出,峰的宽度受σ控制。正态分布由两个参数…

AI落地遭“卡脖子”困境:为什么说联邦学习是解决良方?

作者 | Just出品 | AI科技大本营(ID:rgznai100)毋庸置疑,在业界对人工智能(AI)应用落地备受期待的时期,数据这一重要支点却越来越成为一个“卡脖子”的难题。AI落地需要数据来优化模型效果,但大…

Linux下截取指定时间段日志并输出到指定文件

sed -n /2019-04-22 16:10:/,/2019-04-22 16:20:/p log.log > bbb.txt 转载于:https://www.cnblogs.com/mrwuzs/p/10752037.html

nginx+keepalive主从双机热备+自动切换解决方案

环境采集cenots 6.3 64位迷你安装,因为安装前,你需要做一些工作yum install -y make wget如果你愿意可以更新下系统,更换下yum源.1.安装keepalive官方最新版 keepalived-1.2.7tar zxvf keepalived-1.2.7.tar.gzcd keepalived-1.2.7在此之前。…

概率论中指数分布介绍及C++11中std::exponential_distribution的使用

指数分布:在深度学习中,我们经常会需要一个在x0点处取得边界点(sharp point)的分布。为了实现这一目的,我们可以使用指数分布(exponential distribution): p(x;λ) λlx≥0exp(-λx)指数分布使用指示函数(indicator function) lx≥…

肖仰华:知识图谱构建的三要素、三原则和九大策略 | AI ProCon 2019

演讲嘉宾 | 肖仰华(复旦大学教授、博士生导师,知识工场实验室负责人) 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 近两年,知识图谱技术得到了各行各业的关注,无论是企业公司还…

Docker mongo副本集环境搭建

1、MongoDB Docker 镜像安装 docker pull mongo 2、Docker容器创建 MongoDB Docker 容器创建有以下几个问题&#xff1a; 1- MongoDB 容器基本创建方法和数据目录挂载 2- MongoDB 容器的数据迁移 3- MongoDB 设置登录权限问题docker run -p 27017:27017 -v <LocalDirectoryP…

菜鸟学习HTML5+CSS3(一)

主要内容&#xff1a; 1.新的文档类型声明&#xff08;DTD&#xff09; 2.新增的HTML5标签 3.删除的HTML标签 4.重新定义的HTML标签 一、新的文档类型声明&#xff08;DTD&#xff09; HTML 5的DTD声明为&#xff1a;<!doctype html>、<!DOCTYPE html>、<!DOCTY…

激活函数之logistic sigmoid函数介绍及C++实现

logistic sigmoid函数&#xff1a;logistic sigmoid函数通常用来产生Bernoulli分布中的参数&#xff0c;因为它的范围是(0,1)&#xff0c;处在的有效取值范围内。logisitic sigmoid函数在变量取绝对值非常大的正值或负值时会出现饱和(saturate)现象&#xff0c;意味着函数会变得…

NLP重要模型详解,换个方式学(内附资源)

&#xff08;图片有AI科技大本营付费下载自视觉中国&#xff09;作者 | Jaime Zornoza&#xff0c;马德里技术大学译者 | 陈之炎校对 | 王威力编辑 | 黄继彦来源 | 数据派THU&#xff08;ID&#xff1a;DatapiTHU&#xff09;【导语】本文带你以前所未有的方式了解深度学习神经…

大闸蟹的OO第二单元总结

OO的第二单元是讲多线程的协作与控制&#xff0c;三次作业分别为FAFS电梯&#xff0c;ALS电梯和三部需要协作的电梯。三次作业由浅入深&#xff0c;让我们逐渐理解多线程的工作原理和运行状况。 第一次作业&#xff1a; 第一次作业是傻瓜电梯&#xff0c;也就是完全不需要考虑捎…

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(31)-MVC使用RDL报表

原文:构建ASP.NET MVC4EF5EasyUIUnity2.x注入的后台管理系统&#xff08;31&#xff09;-MVC使用RDL报表这次我们来演示MVC3怎么显示RDL报表,坑爹的微软把MVC升级到5都木有良好的支持报表,让MVC在某些领域趋于短板 我们只能通过一些方式来使用rdl报表。 Razor视图不支持asp.net…

18段代码带你玩转18个机器学习必备交互工具

&#xff08;图片有AI科技大本营付费下载自视觉中国&#xff09;作者 | 曼纽尔阿米纳特吉&#xff08;Manuel Amunategui&#xff09;、迈赫迪洛佩伊&#xff08;Mehdi Roopaei&#xff09;来源 | 大数据&#xff08;ID&#xff1a;hzdashuju&#xff09;【导读】本文简要介绍将…

激活函数之ReLU/softplus介绍及C++实现

softplus函数(softplus function)&#xff1a;ζ(x)ln(1exp(x)).softplus函数可以用来产生正态分布的β和σ参数&#xff0c;因为它的范围是(0,∞)。当处理包含sigmoid函数的表达式时它也经常出现。softplus函数名字来源于它是另外一个函数的平滑(或”软化”)形式&#xff0c;这…

windows server 2012 用sysdba登录报错 ORA-01031

报错显示&#xff1a;C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期三 4月 24 09:09:33 2019 Copyright (c) 1982, 2010, Oracle. All rights reserved. ERROR:ORA-01031: 权限不足 请输入用户名: 1、查看本地用户和组确认权…

[SignalR]初步认识以及安装

原文:[SignalR]初步认识以及安装1.什么是ASP.NET SignalR&#xff1f; ASP .NET SignalR是一个 ASP .NET 下的类库&#xff0c;可以在ASP .NET 的Web项目中实现实时通信。什么是实时通信的Web呢&#xff1f;就是让客户端&#xff08;Web页面&#xff09;和服务器端可以互相通知…

CUDA Samples:Vector Add

以下CUDA sample是分别用C和CUDA实现的两向量相加操作&#xff0c;参考CUDA 8.0中的sample:C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\0_Simple&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;各个文件内容如下&#xff1a;common.hpp:#ifndef FBC_CU…

你和人工智能的对话,正在被人工收听

&#xff08;图片有AI科技大本营付费下载自视觉中国&#xff09;作者 | 周晶晶编辑 | 阿伦来源 | 燃财经&#xff08;ID:rancaijing&#xff09;如今&#xff0c;智能设备越来越多地出现在每个人的生活中&#xff0c;在享受它们带来的便利时&#xff0c;很多人或许没有意识到&a…

python数据结构与算法总结

python常用的数据结构与算法就分享到此处&#xff0c;本月涉及数据结构与算法的内容有如下文章&#xff1a; 《数据结构和算法对python意味着什么&#xff1f;》 《顺序表数据结构在python中的应用》 《python实现单向链表数据结构及其基本方法》 《python实现单向循环链表数据…

自定义classloader中的接口调用

2019独角兽企业重金招聘Python工程师标准>>> 注意其中转型异常的描述&#xff0c;左边声明和强转括号内都是appclassloader加载的&#xff0c;而让自定义加载类的接口也由appclassloader加载&#xff0c;所以转型成功 转载于:https://my.oschina.net/heatonn1/blog/…

学点基本功:机器学习常用损失函数小结

&#xff08;图片付费下载自视觉中国&#xff09;作者 | 王桂波转载自知乎用户王桂波【导读】机器学习中的监督学习本质上是给定一系列训练样本 &#xff0c;尝试学习 的映射关系&#xff0c;使得给定一个 &#xff0c;即便这个不在训练样本中&#xff0c;也能够得到尽量接近…

python生成简单的FTP弱口令扫描

2019独角兽企业重金招聘Python工程师标准>>> 前言 Ftp这个类实现了Ftp客户端的大多数功能,比如连接Ftp服务器、查看服务器中的文件、上传、下载文件等功能,Ftp匿名扫描器的实现&#xff0c;需要使用FTP这个类,首先用主机名构造了一个Ftp对象(即ftp),然后用这个ftp调…

C++中const指针用法汇总

这里以int类型为例&#xff0c;进行说明&#xff0c;在C中const是类型修饰符&#xff1a;int a; 定义一个普通的int类型变量a&#xff0c;可对此变量的值进行修改。const int a 3;与 int const a 3; 这两条语句都是有效的code&#xff0c;并且是等价的&#xff0c;说明a是一个…

mongodb基础应用

一些概念 一个mongod服务可以有建立多个数据库&#xff0c;每个数据库可以有多张表&#xff0c;这里的表名叫collection&#xff0c;每个collection可以存放多个文档&#xff08;document&#xff09;&#xff0c;每个文档都以BSON&#xff08;binary json&#xff09;的形式存…

【leetcode】1030. Matrix Cells in Distance Order

题目如下&#xff1a; We are given a matrix with R rows and C columns has cells with integer coordinates (r, c), where 0 < r < R and 0 < c < C. Additionally, we are given a cell in that matrix with coordinates (r0, c0). Return the coordinates of…

深度学习面临天花板,亟需更可信、可靠、安全的第三代AI技术|AI ProCon 2019

整理 | 夕颜 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 在人工智能领域中&#xff0c;深度学习掀起了最近一次浪潮&#xff0c;但在实践和应用中也面临着诸多挑战&#xff0c;特别是关系到人的生命&#xff0c;如医疗、自动驾驶等领域场景时&#xff0c;黑盒…

java robot类自动截屏

直接上代码:package robot;import java.awt.Rectangle;import java.awt.Robot;import java.awt.event.InputEvent;import java.awt.p_w_picpath.BufferedImage;import java.io.File;import java.io.IOException;import javax.p_w_picpathio.ImageIO;import com.sun.glass.event…

激活函数之softmax介绍及C++实现

下溢(underflow)&#xff1a;当接近零的数被四舍五入为零时发生下溢。许多函数在其参数为零而不是一个很小的正数时才会表现出质的不同。例如&#xff0c;我们通常要避免被零除或避免取零的对数。上溢(overflow)&#xff1a;当大量级的数被近似为∞或-∞时发生上溢。进一步的运…

parsing:NLP之chart parser句法分析器

已迁移到我新博客,阅读体验更佳parsing:NLP之chart parser句法分析器 完整代码实现放在我的github上:click me 一、任务要求 实现一个基于简单英语语法的chart句法分析器。二、技术路线 采用自底向上的句法分析方法&#xff0c;简单的自底向上句法分析效率不高&#xff0c;常常…