onMeasure实例分析

原创 2013年12月03日 17:29:55

          

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

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

    @Override
    protected 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);
    }

    @Override
    protected 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实例分析

上面这个两个视图是Android API中没有给出来的但在来电接听和闹钟被使用到的一个widget视图——GlowPadView.java 我们通过源码来看看这个View的大小是怎么通过onMeas...
  • u012604322
  • u012604322
  • 2013年12月03日 17:29
  • 2227

Android View 的onMeasure方法详解和例子解释

  • 2013年09月25日 11:06
  • 56KB
  • 下载

Android 自定义View 中的OnMeasure的用法

作用:
  • a739697044
  • a739697044
  • 2014年06月12日 12:43
  • 10001

Android自定义View(三、深入解析控件测量onMeasure)

转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51468648 本文出自:【openXu的博客】 目录:onMeasure什么...
  • u010163442
  • u010163442
  • 2016年05月24日 14:59
  • 21059

ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解

简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局——onLayout():决定View在ViewGroup中的位置...
  • ljx19900116
  • ljx19900116
  • 2014年12月08日 18:31
  • 1919

Android onmeasure 与 onLayout示例

一、viewgroup垂直滚动布局的设置——————————————————– 1、 onmeasure过程@Override protected void onMeasure(int widt...
  • lovoo
  • lovoo
  • 2016年06月28日 08:16
  • 338

Android的onMeasure和onLayout And MeasureSpec揭秘

Android中自定义ViewGroup最重要的就是onMeasure和onLayout方法,都需要重写这两个方法,ViewGroup绘制 的过程是这样的:onMeasure → onLayout →...
  • yulinyige
  • yulinyige
  • 2013年10月12日 21:44
  • 5827

android中对View的onMeasure()方法的理解

在android开发中,很多人对自定义View是望而生畏,我也一样,但这又是向高级进阶的必经之路,主要是对View里面的很多方法不知道怎么理解,其中一个就是onMeasure()方法,网上有很多这样解...
  • lovexieyuan520
  • lovexieyuan520
  • 2016年01月31日 15:44
  • 12704

ANDROID自定义视图——onMeasure流程,MeasureSpec详解

简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局——onLayout():决定View在ViewGroup中的位置...
  • u014453493
  • u014453493
  • 2015年11月08日 21:04
  • 191

自定义View简单小例子

在开发过程中,尽管Android系统提供了非常多的控件给我们使用,但是还是不能满足我们人类的需求,感觉我们确实在贪婪了,呵呵!这个时候,我们可能就要用到自定义控件,以及自定义属性,应该怎么操作呢? ...
  • true100
  • true100
  • 2015年04月23日 10:37
  • 1106
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:onMeasure实例分析
举报原因:
原因补充:

(最多只允许输入30个字)