Skip to content

Come allineare 8 piccoli cerchi attorno a un cerchio grande centrato, come mostra l'immagine allegata?

Apprezziamo il tuo supporto per condividere le nostre sezioni in riferimento all'informatica.

Soluzione:

Vi mostro un altro approccio.

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class CircleMenu extends View {

private Paint mainPaint;
private Paint secondPaint;
private Paint textPaint;
private int radius_main =130;
private int menuRadialButtonsCount =7;
private int menuInnerPadding = 40;
private int radialCircleRadius = 60;
private int textPadding = 25;
private double startAngle = - Math.PI/2f;;
public CircleMenu(Context context) {
    super(context);
}

public CircleMenu(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CircleMenu(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@Override
protected void onFinishInflate() {
    super.onFinishInflate();

    mainPaint = new Paint();
    mainPaint.setColor(Color.BLUE);
    secondPaint = new Paint();
    secondPaint.setColor(Color.DKGRAY);
    textPaint = new Paint();
    textPaint.setColor(Color.BLACK);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
   int centerX = canvas.getWidth()/2 ;
    int centerY= canvas.getHeight()/2;
    canvas.drawCircle(centerX,centerY,radius_main,mainPaint);
    for(int i=0;i

È possibile estendere questa classe, aggiungere metodi per impostare le dimenzioni dalle risorse, controllare il numero di cerchi, le loro dimensioni, i padding, onTouch, le ombre, i colori ....

enter image description here

 

Versione aggiornata:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import java.util.ArrayList;

public class CircleMenu extends View {

public static interface IMenuListener{

    public void onMenuClick(MenuCircle item);
}

public static class MenuCircle{
    private int x,y,radius;
    public int id;
    public String text;

}

private Paint mainPaint;
private Paint secondPaint;
private Paint textPaint;
private int radius_main =130;

private int menuInnerPadding = 40;
private int radialCircleRadius = 60;
private int textPadding = 25;
private double startAngle = - Math.PI/2f;
private ArrayList elements;
private IMenuListener listener;

public void setListener(IMenuListener listener){
    this.listener = listener;
}
public void clear(){
    elements.clear();
    listener=null;
}
public CircleMenu(Context context) {
    super(context);
    init();
}

public CircleMenu(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public CircleMenu(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}
private void init(){
    elements = new ArrayList<>();
}
public void addMenuItem(String text,int id){
    MenuCircle item = new MenuCircle();
    item.id = id;
    item.text=text;
    elements.add(item);

}

@Override
protected void onFinishInflate() {
    super.onFinishInflate();

    mainPaint = new Paint();
    mainPaint.setColor(Color.BLUE);
    secondPaint = new Paint();
    secondPaint.setColor(Color.DKGRAY);
    textPaint = new Paint();
    textPaint.setColor(Color.BLACK);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
   int centerX = canvas.getWidth()/2 ;
    int centerY= canvas.getHeight()/2;
    canvas.drawCircle(centerX,centerY,radius_main,mainPaint);
    for(int i=0;i

Nel frammento:

  CircleMenu cm = (CircleMenu) view.findViewById(R.id.c_menu);
    cm.addMenuItem("one",1);
    cm.addMenuItem("two",2);
    cm.addMenuItem("three",3);
    cm.addMenuItem("ten",10);
    cm.addMenuItem("oh oh",156);
    cm.addMenuItem("exit",134);
    cm.setListener(new CircleMenu.IMenuListener() {
        @Override
        public void onMenuClick(CircleMenu.MenuCircle item) {
            Toast.makeText(getActivity(),item.text+" "+item.id,Toast.LENGTH_LONG).show();
        }
    });

Questo ti aiuta.






    

    

    

    

    










L'output è:

enter image description here

Valutazioni e recensioni

Se ritieni che il nostro articolo sia stato utile, sarebbe molto utile se lo condividessi con più sviluppatori e ci aiutassi a diffondere queste informazioni.



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.