上面这个两个视图是Android API中没有给出来的但在来电接听和闹钟被使用到的一个widget视图——GlowPadView.java

我们通过源码来看看这个View的大小是怎么通过onMeasure来控制的。

    @Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {final int minimumWidth = getSuggestedMinimumWidth();final int minimumHeight = getSuggestedMinimumHeight();int computedWidth = resolveMeasured(widthMeasureSpec, minimumWidth);int computedHeight = resolveMeasured(heightMeasureSpec, minimumHeight);...
setMeasuredDimension(computedWidth, computedHeight);}
    @Overrideprotected int getSuggestedMinimumWidth() {// View should be large enough to contain the background + handle and// target drawable on either edge.return (int) (Math.max(mOuterRing.getWidth(), 2 * mOuterRadius) + mMaxTargetWidth);}

mOuterRing为一个指定的圆(由Shape画出,因此给出的是宽和高,相当于圆半径),mOuterRadius为最大的虚线圆的半径,mMaxTargetWidth为图中Zzz图片或其它图片的宽度。这部分值是有开发人员指定的自己期望的自己的视图中属性的大小

    private int resolveMeasured(int measureSpec, int desired){int result = 0;int specSize = MeasureSpec.getSize(measureSpec);switch (MeasureSpec.getMode(measureSpec)) {case MeasureSpec.UNSPECIFIED:result = desired;break;case MeasureSpec.AT_MOST:result = Math.min(specSize, desired);break;case MeasureSpec.EXACTLY:default:result = specSize;}return result;}

我们从width分析,承载这个View的ViewGroup可能有两种情况,一(A)提供的空间比上面我们给出的值大,二(B)是要小(开发中基本上我们不会允许这种状况出现,但设计的逻辑依然必须考虑到这种可能)。然后就要看的是View的layout_width,一是wrap_content,对应AT_MOST,A得到的值为给出的值,B值为父视图的值,虽然我们不希望这样,但父视图只给出了这么些空间,我们也只得这样。

二是match_parent,对应只有一个父视图的值,这也是符合要求的。

一个好的设计应该要考虑到各种情况下的使用,而一个可复用的框架设计更是如此,设计之前需要预想到各种可能的应用情况。

onMeasure实例分析相关推荐

  1. gpgpu-sim卡分配程序设计实例分析

    gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...

  2. python多功能电子钟_python gui - PyQt4 精彩实例分析之电子钟

    PyQt4 精彩实例分析之电子钟,当然在写实例之前要先安装PyQt4模块.from PyQt4.QtGui import * from PyQt4.QtCore import * import sys ...

  3. RPC-原理及RPC实例分析

    还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞: (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻 ...

  4. python asyncio教程_python中使用asyncio实现异步IO实例分析

    1.说明 Python实现异步IO非常简单,asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持. asyncio的编程模型就是一个消息循环.我们从asyncio模块中直接 ...

  5. 马歇尔·赫伯特:人工智能的前沿技术与实例分析

    来源:中国人工智能学会 2017年12月11日,国际知名机器人专家.美国卡耐基梅隆大学机器人研究所所长马歇尔·赫伯特(Martial Hebert)教授和首席科学家大卫·伯恩(David Bourne ...

  6. python怎么处理数据_python中scrapy处理项目数据的实例分析

    在我们处理完数据后,习惯把它放在原有的位置,但是这样也会出现一定的隐患.如果因为新数据的加入或者其他种种原因,当我们再次想要启用这个文件的时候,小伙伴们就会开始着急却怎么也翻不出来,似乎也没有其他更好 ...

  7. Android10.0 Binder通信原理(四)-Native-C\C++实例分析

    摘要:本节主要来讲解Android10.0 Binder的Native层实例流程 阅读本文大约需要花费35分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Androi ...

  8. Android Touch事件原理加实例分析

    Android中有各种各样的事件,以响应用户的操作.这些事件可以分为按键事件和触屏事件.而Touch事件是触屏事件的基础事件,在进行Android开发时经常会用到,所以非常有必要深入理解它的原理机制. ...

  9. SSL/TLS 协议简介与实例分析

    作者:drinkey 以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SS ...

最新文章

  1. yii1框架,事务使用方法
  2. 细粒度情感分析:还在用各种花式GNN?或许只用RoBERTa就够了
  3. 自动生成Mapper文件(基于Mybatis Maven插件)
  4. 使用PCA对特征数据进行降维
  5. SQL语句中用Parameters有什么好处
  6. Oracle 跨库 查询 复制表数据 分布式查询
  7. HH SaaS电商系统的商城模块设计
  8. 阿里云 超级码力在线编程大赛初赛 第2场 题目3. 五字回文
  9. ios 监听一个控制器的属性_ios - kvo观察者示例(监听类的属性变化)
  10. 通知:即日起本博客暂停更新,请移步至yanxin8.com获取最新文章
  11. C++语言基础 —— 控制结构
  12. 应用程序委托和新的单例(译)
  13. HALCON 21.11:深度学习笔记---设置超参数(5)
  14. 【论文阅读】医疗影像图像增强
  15. 编程基本功:如何判断两个线段有重叠?
  16. Atitit glb 1tie 2tie city lst 一二线城市列表数据约50个一线城市Alpha ++ 阿尔法++,,London 伦敦,,New York 纽约,,Alpha +
  17. Unity碰撞和触发
  18. mac上如何安装夜神模拟器
  19. python怎样批量修改文件大小_使用python对文件夹下的照片进行批量修改尺寸
  20. Simulink 环境基础知识(五)--编程建模基础知识

热门文章

  1. Twitter的推荐系统开源了,Twitter的推荐系统是什么样的呢?Twitter推荐系统的架构说明
  2. 物流基础知识(十六)
  3. Origin更改图的尺寸大小
  4. 世界杯:用Python分析热门夺冠球队
  5. 【集合论】二元关系 ( 特殊关系类型 | 空关系 | 恒等关系 | 全域关系 | 整除关系 | 大小关系 )
  6. 质量是企业的生命,如何破解质量管控难题?质量管理系统推荐
  7. 致我们终将组件化的web
  8. React单页面图片瀑布流——Macy.js
  9. Win10 OneNote 一直卡的登录界面
  10. Draggable拖拽+Collapse使用(不一样的手风琴)