覆写onMeaure进行measure操作 覆写equals

android在屏幕上绘制视图3步: measure测量、layout布局、draw绘制。

这里主要介绍第一步measure,measure是view大小计算的过程。先来一个自定义View的例子,演示如何覆写onMeasure方法

一、 覆写onMeasure的例子(自定义View)

例子下载地址 自定义view全屏显示蓝色方块

1. 覆写onMeasure

[plain] view plaincopyprint?

@Override

protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){

}

2. 分别计算出宽高,后面解释使用的方法的作用

[plain] view plaincopyprint?

privateintmeasureWidth(intpWidthMeasureSpec){

intresult=0;

intwidthMode=MeasureSpec.getMode(pWidthMeasureSpec);

intwidthSize=MeasureSpec.getSize(pWidthMeasureSpec);

switch(widthMode){

caseMeasureSpec.AT_MOST:

caseMeasureSpec.EXACTLY:

result=widthSize;

break;

}

returnresult;

}

privateintmeasureHeight(intpHeightMeasureSpec){

intresult=0;

intheightMode=MeasureSpec.getMode(pHeightMeasureSpec);

intheightSize=MeasureSpec.getSize(pHeightMeasureSpec);

switch(heightMode){

caseMeasureSpec.AT_MOST:

caseMeasureSpec.EXACTLY:

result=heightSize;

break;

}

returnresult;

}

3. 调用setMeasuredDimension,指定视图在屏幕上的大小、

[plain] view plaincopyprint?

intmeasureWidth=measureWidth(widthMeasureSpec);

intmeasureHeight=measureHeight(heightMeasureSpec);

setMeasuredDimension(measureWidth,measureHeight);

二、 解释例子中使用的MeasureSpec

MeasureSpec是一个android.view.View的内部类。

MeasureSpec封装了从父类传送到子类的布局要求信息。每个MeasureSpec对象描述了空间的高度或宽度。MeasureSpec由size和mode组成。

1.MeasureSpec的方法介绍:

类名.方法名解释

MeasureSpec.getMode(int measureSpec)根据提供的测量值(格式)提取模式(上述三个模式之一)

MeasureSpec.getSize(int measureSpec)根据提供的测量值(格式)提取大小值(这个大小也就是我们通常所说的大小)

MeasureSpec.makeMeasureSpec(int size,int mode)根据提供的大小值和模式创建一个测量值(格式)

2.MeasureSpec有三种mode,分别说明并描述模式与layout参数值的对应关系

模式模式翻译模式与Layout参数的对应关系

android:layout_width=“”

android:layout_height=“”模式描述

UNSPECIFIED无限制parent view不约束child view的大小

AT_MOST最多的wrap_contentparent view 为child view指定最大的值,child view可以在范围内设置

EXACTLY准确的fill_parent,精确值(例如50dip)parent view为child view指定固定大小

三、 疑惑

例子总只写了一个view,在onMeasure中添加log获知此方法执行2次? 在ADT 20.3中同样的代码onMeasure执行4次?不是应该只执行一次吗?

*** 待添加

1. 如果视图还未添加到ViewGroup中,还想获取其宽高,需要手动调用View.measure()方法,可以传入三种模式或者具体值

2. child.measure(MeasureSpec.EXACTLY | itemWidth, MeasureSpec.UNSPECIFIED);

MeasureSpec.EXACTLY | itemWidth?

3. View.setMeasuredDimension() 与 ViewGroup.measureChildren()的区别?

四、资料

官方资料:Custom Components

http://developer.android.com/guide/topics/ui/custom-components.html

计算控件尺寸

http://www.cnblogs.com/xirihanlin/archive/2009/07/23/1529238.html

MeasureSpec介绍 ( 如何计算size和mode )

http://blog.csdn.net/whyrjj3/article/details/7927585

重写onMeasure典型例子:

http://www.blogjava.net/liuyanbo/archive/2012/03/15/371969.html

提高:

自定义view改成addview多个,每个layout参数不同

各种模式画图比较

本篇对覆写onMeausre有所了解,但是知道进行测量并不能显示视图,还需要进行onLayout操作,可以查看此文章《覆写onLayout进行layout,含自定义ViewGroup例子》

2013-02-28 “待添加” 内容
覆写onMeaure进行measure操作 覆写equals

2013-03-31 添加与onLayout关联

2013-04-07添加MeasureSpec.EXACTLY | itemWidth

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/90525.html

更多阅读

三星i9300如何连接电脑教程 三星gt i9300刷机教程

三星i9300如何连接电脑教程——简介为了保证手机能够正确的连接上电脑,安装好手机的驱动是必不可少的,也是对三星I9300进行一系列操作的前提,下面告诉大家三星手机如何与电脑连接三星i9300如何连接电脑教程——方法/步骤三星i9300如何

磁盘被写保护怎么办? 精 磁盘写保护怎么办

在复制电脑上的资料到U盘的时候,显示出“磁盘被写保护”,不能对磁盘进行任何操作。这是怎么一回事?磁盘被写保护怎么办? 精——修改注册表磁盘被写保护怎么办? 精 1、在开始菜单栏的搜索框输入“regedit”,打开注册表编辑器磁盘被写保护怎

如何去除U盘的写保护 精 u盘去除写保护工具

如何去除U盘的写保护 精——简介很多时候因为我们操作不当或是病毒的原因导致我们的U盘被写保护,在写保护的情况下我们无法对U盘进行任何操作,甚至格式化都不可以。网上有很多教程,最有效的还是量产工具还原我们U盘,但是大多数朋友在使

股市集合竞价的操作技巧 股市集合竞价时间

股市集合竞价的操作技巧集合竞价是每个交易日开市前的一个重要的环节,投资者如果能运用好集合竞价这一时段进行正确操作的话,可说是给当天的操作开了个好头。那究竟该如何正确运用集合竞价进行买卖呢?集合竞价时,成交价如何确定?集合竞

声明:《覆写onMeaure进行measure操作 覆写equals》为网友兲冷亽凉分享!如侵犯到您的合法权益请联系我们删除