首页 > 其他 > 详细

onMeasure实例分析

时间:2015-10-16 16:56:03      阅读:239      评论:0      收藏:0      [点我收藏+]

 

本文转自:http://blog.csdn.net/u012604322/article/details/17097105

 

技术分享         技术分享

上面这个两个视图是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实例分析

原文:http://www.cnblogs.com/sishuiliuyun/p/4885497.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!