Android: Cómo poner elementos personalizados en un círculo / destino

Necesito crear una especie de objetivo y añadir objetos a él, que tienen diferentes colores y hacer cosas diferentes cuando hago clic directamente en ellos.

¿Alguna sugerencia sobre cómo lograr esto? Tal vez hay una biblioteca que puedo usar?

Círculos en el teléfono Círculos con objetos personalizados item seleccionado

2 Solutions collect form web for “Android: Cómo poner elementos personalizados en un círculo / destino”

La solución formal es

Crear roundedshape.xml dentro de roundedshape.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:innerRadiusRatio="4" android:shape="ring" android:thicknessRatio="5" android:useLevel="false"> <solid android:color="#af08d7" /> <size android:width="25dip" android:height="25dip"></size> </shape> </item> </layer-list> 

Agregue RelativeLayout teniendo android:background="@drawable/roundedshape"

 <RelativeLayout android:layout_width="fill_parent" android:layout_height="300dp" android:padding="50dp" android:background="@drawable/roundedshape" android:id="@+id/myRelativeLayout" > </RelativeLayout> 

En su Activity añada estos códigos para generar dinámicamente ImageButtons y agregar en Layout .

  RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.myRelativeLayout); for (int j = 0; j < 4; j++) { ImageButton myImageButton = new ImageButton(this); //generate ImageButton myImageButton.setId(j); //Set Id of button //Generate Random Number to place ImageButtons in random position int min = 40; int max = 60; Random r = new Random(); int randomNum = r.nextInt(max - min + 1) + min; myImageButton.setBackgroundResource(R.drawable.chatbox); //Set background of ImageButton RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100, 100); params.leftMargin = randomNum+j*randomNum; //Generate left margin dynamically params.topMargin = randomNum +j*randomNum; //Generate right margin dynamically relativeLayout.addView(myImageButton, params); //Add view myImageButton.setOnClickListener(getButtonAndDoAction(myImageButton)); //Add OnClickListener } 

Agregue este método en Activity para manejar el evento de clic de sus botones de imagen.

 View.OnClickListener getButtonAndDoAction(final ImageButton button) { return new View.OnClickListener() { public void onClick(View v) { Toast.makeText(MainActivity.this, "button clicked" +button.getId(), Toast.LENGTH_SHORT).show(); } }; 

RESULTADO:

Introduzca aquí la descripción de la imagen

NOTA: He añadido comentarios para que los códigos sean lo más claros posible

Podrías dibujar tu imagen como:

  1. Vistas separadas – como en la respuesta proporcionada utilizando RelativeLayout
  2. Dibujar sobre lienzo
  3. Utilice opengl / bibliotecas de gráficos existentes.

Depende de tus objetivos, tal vez necesites un diseño personalizado, tal vez algunos sprites en tu juego o quizás bitmap para guardar en el sistema de archivos.

  • La vista personalizada de Android solo recibe onDraw una vez
  • ¿La funcionalidad de TextureView en Android pre-4.0?
  • Toca dos vistas al mismo tiempo en android
  • Android: una nueva pregunta GUI - ¿cómo declarar viewGroup, sin formato de archivo XML?
  • Invisible SurfaceView para previsualización de la cámara
  • ¿Qué tipo de conexión existe entre innerRadiusRatio y thicknessRatio de la clase GradientDrawable?
  • Lista de posición de los puntos repetidos en getview
  • Colocación / superposición (índice-z) una vista encima de las pestañas de la barra de acciones
  • Android - Llamando GONE y VISIBLE hace que la vista se muestre en el lugar equivocado
  • Android: ¿Cómo hacer una vista previa de cámara en forma de círculo?
  • Android Move ImageView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.