/** * Rotate the buttons. * * @param degrees The degrees, the menu items should get rotated. */ private void rotateButtons(float degrees) { int left, top, childCount = getChildCount(); float angleDelay = 360 / childCount; angle += degrees; if (angle > 360) { angle -= 360; } else { if (angle < 0) { angle += 360; } } for (int i = 0; i < childCount; i++) { if (angle > 360) { angle -= 360; } else { if (angle < 0) { angle += 360; } } final CircleImageView child = (CircleImageView) getChildAt(i); if (child.getVisibility() == GONE) { continue; } left = Math.round( (float) (((circleWidth / 2) - childWidth / 2) + radius * Math.cos(Math.toRadians(angle)))); top = Math.round( (float) (((circleHeight / 2) - childHeight / 2) + radius * Math.sin(Math.toRadians(angle)))); child.setAngle(angle); if (Math.abs(angle - firstChildPos) < (angleDelay / 2) && selected != child.getPosition()) { selected = child.getPosition(); if (mOnItemSelectedListener != null && rotateToCenter) { mOnItemSelectedListener.onItemSelected(child, selected, child.getId(), child.getName()); } } child.layout(left, top, left + childWidth, top + childHeight); angle += angleDelay; } }
@Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int layoutWidth = r - l; int layoutHeight = b - t; // Laying out the child views final int childCount = getChildCount(); int left, top; radius = (layoutWidth <= layoutHeight) ? layoutWidth / 3 : layoutHeight / 3; childWidth = (int) (radius / 1.5); childHeight = (int) (radius / 1.5); float angleDelay = 360 / getChildCount(); for (int i = 0; i < childCount; i++) { final CircleImageView child = (CircleImageView) getChildAt(i); if (child.getVisibility() == GONE) { continue; } if (angle > 360) { angle -= 360; } else { if (angle < 0) { angle += 360; } } child.setAngle(angle); child.setPosition(i); left = Math.round( (float) (((layoutWidth / 2) - childWidth / 2) + radius * Math.cos(Math.toRadians(angle)))); top = Math.round( (float) (((layoutHeight / 2) - childHeight / 2) + radius * Math.sin(Math.toRadians(angle)))); child.layout(left, top, left + childWidth, top + childHeight); angle += angleDelay; } }