Exemplo n.º 1
0
        protected internal override void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
        {
            base.onMeasure(widthMeasureSpec, heightMeasureSpec);
            int width  = MeasureSpec.getSize(widthMeasureSpec);
            int height = MeasureSpec.getSize(heightMeasureSpec);

            if (0 == mRatioWidth || 0 == mRatioHeight)
            {
                setMeasuredDimension(width, height);
            }
            else
            {
                if (width < height * mRatioWidth / mRatioHeight)
                {
                    setMeasuredDimension(width, width * mRatioHeight / mRatioWidth);
                }
                else
                {
                    setMeasuredDimension(height * mRatioWidth / mRatioHeight, height);
                }
            }
        }
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
        {
            int resWidth  = 0;
            int resHeight = 0;

            int width     = MeasureSpec.getSize(widthMeasureSpec);
            int widthMode = MeasureSpec.getMode(widthMeasureSpec);

            int height     = MeasureSpec.getSize(heightMeasureSpec);
            int heightMode = MeasureSpec.getMode(heightMeasureSpec);

            if (widthMode != MeasureSpec.EXACTLY ||
                heightMode != MeasureSpec.EXACTLY)
            {
                resWidth = getSuggestedMinimumWidth();
                resWidth = resWidth == 0 ? getDefaultWidth() : resWidth;

                resHeight = getSuggestedMinimumHeight();
                resHeight = resHeight == 0 ? GetDefaultWidth() : resHeight;
            }
            else
            {
                resWidth = resHeight = Math.Min(width, height);
            }

            setMeasuredDimension(resWidth, resHeight);

            mRadius = Math.max(getMeasuredWidth(), getMeasuredHeight());

            final int count = getChildCount();
            // menu ite
            int childSize = (int)(mRadius * RADIO_DEFAULT_CHILD_DIMENSION);
            // menu item
            int childMode = MeasureSpec.EXACTLY;

            for (int i = 0; i < count; i++)
            {
                final View child = getChildAt(i);

                if (child.getVisibility() == GONE)
                {
                    continue;
                }

                // menu item
                int makeMeasureSpec = -1;

                if (child.getId() == R.id.id_circle_menu_item_center)
                {
                    makeMeasureSpec = MeasureSpec.makeMeasureSpec(
                        (int)(mRadius * RADIO_DEFAULT_CENTERITEM_DIMENSION),
                        childMode);
                }
                else
                {
                    makeMeasureSpec = MeasureSpec.makeMeasureSpec(childSize,
                                                                  childMode);
                }
                child.measure(makeMeasureSpec, makeMeasureSpec);
            }

            mPadding = RADIO_PADDING_LAYOUT * mRadius;
        }