Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class CircleView extends RelativeLayout {
- static final int centerId = 111;
- private final int radius;
- private RelativeLayout.LayoutParams createNewRelativeLayoutParams() {
- RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
- RelativeLayout.LayoutParams.WRAP_CONTENT,
- RelativeLayout.LayoutParams.WRAP_CONTENT);
- lp.addRule(RelativeLayout.ABOVE, centerId);
- lp.addRule(RIGHT_OF, centerId);
- return lp;
- }
- private View prepareElementForCircle(View elem, int distX, int distY) {
- RelativeLayout.LayoutParams lp = createNewRelativeLayoutParams();
- elem.measure(0, 0);
- int deltaX = elem.getMeasuredWidth() / 2;
- int deltaY = elem.getMeasuredHeight() / 2;
- lp.setMargins(distX - deltaX, 0, 0, radius - distY - deltaY);
- elem.setLayoutParams(lp);
- return elem;
- }
- public CircleView(Context context, int radius, View[] elements) {
- super(context);
- this.radius = radius;
- RelativeLayout.LayoutParams lpView = new RelativeLayout.LayoutParams(
- RelativeLayout.LayoutParams.MATCH_PARENT,
- RelativeLayout.LayoutParams.MATCH_PARENT);
- this.setLayoutParams(lpView);
- View center = new View(context);
- center.setBackgroundColor(0xFFF77AC9);
- center.setId(centerId);
- RelativeLayout.LayoutParams lpcenter = new RelativeLayout.LayoutParams( 0, 0);
- lpcenter.addRule(CENTER_HORIZONTAL);
- lpcenter.addRule(CENTER_VERTICAL);
- center.setLayoutParams(lpcenter);
- this.addView(center);
- this.addView(prepareElementForCircle(elements[0], 0, 0));
- if (elements.length % 2 == 0) {
- this.addView(prepareElementForCircle(elements[elements.length / 2], 0, 2 * radius));
- }
- if (elements.length > 2) {
- for (int i = 1; i <= (elements.length - 1) / 2; i++) {
- int y = i * 4 * radius / elements.length;
- int x = (int) Math.sqrt(Math.pow(radius, 2) - Math.pow((radius - y), 2));
- this.addView(prepareElementForCircle(elements[i], x, y));
- this.addView(prepareElementForCircle(elements[elements.length - i], -x, y));
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement