Semi circular menu with elements facing towards center

穿精又带淫゛_ 提交于 2019-12-13 01:13:23

问题


I need a semi circular menu for my app . I have been using this library to achieve the same :-

https://github.com/xresco/CircularLayout

I am able to achieve something like this:-

As you can see the Library works well for circular layout , however for rectangular layouts , not so good.

The code which handles the rotation of the rectangles is as follows:-

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

Is there a way so that the rectangles appear as whole and still facing to the center?

I have come here from here:-

Horizontal Curved Sliding menu

Any help is appreciated.Thank you.

来源:https://stackoverflow.com/questions/36649137/semi-circular-menu-with-elements-facing-towards-center

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!