在View中,onMeasure是父类调用,用来计算该View的显示空间,但是一直不理解,MeasureSpec.EXACTLY,MeasureSpec.AT_MOST,MeasureSpec.UNSPECIFIED是什么意思,做了一个简单测测试,让后Debug就明白了。代码如下:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(measureWidth(widthMeasureSpec),measureHeight(heightMeasureSpec));
}
/**
* 高度
* @param heightMeasureSpec
* @return
*/
private int measureHeight(int heightMeasureSpec) {
int specMode = MeasureSpec.getMode(heightMeasureSpec);
int specSize = MeasureSpec.getSize(heightMeasureSpec);//父的空间大小
int h = bitmap.getHeight(); //图片的高度
int result = 0 ;
if (specMode == MeasureSpec.EXACTLY) {//父为 wrap_content
result = Math.min(h, specSize);
}else if(specMode == MeasureSpec.AT_MOST){//父为fill_parent
result = specSize;
} else {
result = specSize;
}
return result;
}
main.xml (使用两个layout,就是证明,size,不是整个,而是view的父容器的大小)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent" //修改该值
android:layout_height="fill_parent" //修改该值
android:id="@+id/layoutId"
android:layout_weight="2"
/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layoutId1"
android:background="#FFFFFFCC"
android:layout_weight="1"
/>
</LinearLayout>
分享到:
相关推荐
对View的量测原理进行了非常详尽的介绍,并且给出了一个示例进行解释
Android View.onMeasure方法详解及实例 View在屏幕上显示出来要先经过measure(计算)和layout(布局). 1、什么时候调用onMeasure方法? 当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,“你想...
Android 自定义view,覆写onMeasure例子
背景:楼主本人的电脑在某一段时间使用过程中,只要一启动模拟器上我们的APP,电脑散热风扇的声音就加大,...这个自定义view在onDraw方法中,调用了一个很不起眼的方法:setLayoutParams. 将这个方法去掉之后,界面滑动
2、使用单个ListView的addHeaderView()方法(给listview设置顶部固定的一个view) 评价:比较简便的方法,但是如果顶部布局需要监听滑动事件,也不可取。 3、使用LinearLayout取代ListView(重写LinearLayout) ...
Android中自定义View之流式布局的Demo,代码中关键步骤并有注释原理解说,轻松掌握自定义View的onMeasure和onLayout的实现
测量 摆放 绘制 * measure -> layout -> draw * | | | * onMeasure -> onLayout -> ... * onMeasure() (指定自己的宽高, 所有子View的宽高)-> onLayout() (摆放所有子View) -> onDraw() (绘制内容)
自定义View的PPT,包含了Android里面自定义View的onMeasure,onLayout等知识点
博客《FlowLayout详解(一)——onMeasure()与onLayout()》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/47029169
博客在: http://blog.csdn.net/ethan_xue/article/details/7401163
onLayout在Android中view如何完成绘制这个过程介绍了很多,但是很多理论化的东西,最近重新整理一下,通俗的讲解一下。View绘制过程就好比你向银行贷款, 在Android中view如何完成绘制这个过程介绍了很多,但是很多...
在负责的View中,onMeasure方法调用顺序测试程序。
自定义view之cicle 根据自定义view的4个步骤来定义view 1.自定义属性 2.构造方法中获取该属性 3.重新onMeasure方法 4.重写onDraw方法
既然是自定义控件,本文的该控件是直接继承View,然后重写View的onMeasure和onDraw方法来实现。其中onMeasure主要作用是测量控件的宽/高。而onDraw则是将界面绘制到屏幕上。 从效果的效果上看,我们需要自定义一些...
在SDK中我们可以看到View直接继承于Java的基类Object,实现了图形绘制和按键事件Drawable.Callback KeyEvent.Callback的相关方法,我们自绘时主要实现其内部的onDraw方法,相关的界面计算可以重写onMeasure方法,...
View Android所有的控件都是View或者View的子类,它其实表示的就是屏幕上的一块矩形区域,用一个Rect来表示,...View的Measure过程给我们暴露了一个接口onMeasure,方法的定义是这样的, protected void onMeasure(i
如何用onDraw和onMeasure自定义view
在自定义View时,我们通常会去重写onDraw()方法来绘制View的显示内容。如果该View还需要使用wrap_content属性,那么还必须重写onMeasure()方法。另外,通过自定义attrs属性,还可以设置新的属性配置值。
1.首先贴上我试验成功的代码 代码如下:protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int measureWidth = MeasureSpec.getSize(widthMeasureSpec); int measureHeigth = MeasureSpec....