半圆菜单与面向中心的元素

时间:2016-04-15 13:55:21

标签: android horizontal-scrolling

我的应用需要半圆形菜单。 我一直在用这个库实现同样的目标: -

https://github.com/xresco/CircularLayout

我能够实现这样的目标: -

enter image description here

正如您所看到的,图书馆适用于圆形布局,但对于矩形布局,则不太好。

处理矩形旋转的代码如下: -

 @Override
    @SuppressWarnings("deprecation")
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        final int childs = getChildCount();

        float totalWeight = 0f;

        for(int i=0; i<childs; i++) {
            final View child = getChildAt(i);
            LayoutParams lp = layoutParams(child);
            totalWeight += lp.weight;
        }

        shiftAngle= mAngleRange/totalWeight;


        final int width = getWidth();
        final int height = getHeight();

        final float minDimen = width > height ? height : width;
        float radius = (minDimen )/2f;

        radius=(float) (width/2)+radius_parameter;

        float startAngle = mAngleOffset+270;

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

            final LayoutParams lp = layoutParams(child);

            final float angle = mAngleRange/totalWeight * lp.weight;


            final float centerAngle = startAngle ;
            final int x;
            final int y;
            Log.e("CenterAngle", String.valueOf(centerAngle));
            if(child instanceof CircularLayoutItem)
            {
                CircularLayoutItem civ=(CircularLayoutItem)child;
                civ.setRotationParameters((int)(centerAngle)+90);
            }
            if(childs > 1) {
                x = (int) (radius * Math.cos(Math.toRadians(centerAngle))) + width/2+center_width_parameter;
                y = (int) (radius * Math.sin(Math.toRadians(centerAngle))) + height/3+(int)radius+center_height_parameter;

            } else {
                x = width/2;
                y = height/2;
            }

            final int halfChildWidth = child.getMeasuredWidth()/2;
            final int halfChildHeight = child.getMeasuredHeight()/2;

            final int left = lp.width != LayoutParams.FILL_PARENT ? x - halfChildWidth : 0;
            final int top = lp.height != LayoutParams.FILL_PARENT ? y - halfChildHeight : 0;
            final int right = lp.width != LayoutParams.FILL_PARENT ? x + halfChildWidth : width;
            final int bottom = lp.height != LayoutParams.FILL_PARENT ? y + halfChildHeight : height;
Log.e("Coords", String.valueOf(left)+"/"+right+"/"+top+"/"+bottom);
            child.layout(left, top, right, bottom);
            startAngle += angle;
        }

        invalidate();
    }

有没有办法使矩形看起来像整体并且仍然面向中心?

我从这里来到这里: -

Horizontal Curved Sliding menu

感谢任何帮助。谢谢。

0 个答案:

没有答案