2012-09-04 10 views
7

Quiero tener algo así como estos cinco botones, un botón rodeado por otros cuatro botones. Al igual que este:Botones redondos

enter image description here

sé que con Android que sólo podemos tener puntos de vista de tipo cuadrado, de manera ¿cómo sería posible hacer esto? OpenGl o algo? Alguien tiene enlaces a algo relacionado? Básicamente quiero botones curvados que estén muy juntos.

Respuesta

3

Supongo que al final del día será más fácil hacer esto en una vista personalizada.

Pero si desea utilizar las vistas en stock, sugeriría lo siguiente. Primero, use un contenedor RelativeLayout para organizar los cuatro botones externos en una grilla de 2x2. Luego, coloca el botón central para que se superponga a la cuadrícula en el centro. Coloque el botón central en una Z más alta (más cerca del usuario) que los cuatro botones circundantes. Luego use la transparencia como parte de las imágenes de los botones para que se vean como usted quiere. Entonces (con suerte) pruébalo. Si el orden Z es el correcto, el botón central capturará los grifos que de otro modo habrían pasado a uno de los otros cuatro botones.

Esto realmente no funcionará como está, porque el cuadrado del botón central se introducirá en los cuadrados circundantes. No sé si funcionaría, pero puedes intentar reemplazar el botón central con otra cuadrícula de "piezas" de botones. La grilla tendría posiciones vacías, excepto cuando la imagen del botón central se superpone a la celda de la grilla. Tendrás que hacer esto lo suficientemente fino como para evitar la intrusión en las imágenes de los botones externos.

EDITAR:

Se me ocurrió que tal vez usted puede hacer esto con un grupo de TouchDelegate objetos. Debería organizar los botones como describí al principio, pero solo hacer clic en el contenedor padre. Utilizaría cinco TouchDelegate para averiguar qué botón (si lo hay) estaba debajo de las coordenadas de toque. Desafortunadamente, TouchDelegate solo funciona con Rect zonas de destino, lo que nos deja donde comenzamos. Sin embargo, puede canibalizar source of TouchDelegate y definir su propia versión que acepte algún tipo de clase de forma general en lugar de solo Rect. (La clase de forma debería tener el equivalente de Rect.contains() para probar un golpe. No hay nada integrado en Android, pero podrías escribir fácilmente tus propias clases para las formas específicas que tienes)

Puedes simplificar el código a un poco poniendo la lógica de aciertos y delegación directamente en la vista del contenedor principal, pero creo que sería más limpio tener una clase delegada reutilizable que separe el manejo del evento del propio contenedor.

+0

+ Si mantiene la distancia entre el círculo y los arcos como r * sqrt (2) - r, El centro no recibirá los grifos destinados a otros. Overkill general, sin embargo. – mehmetminanc

+0

Hmm, quiero los botones muy juntos, así que no puedo tener una gran distancia entre ellos, ¿tendré que hacer algo como gráficos 2D? – FabianCook

+0

@SmartLemon: si va a la ruta de vista personalizada, usará un objeto [Canvas] (http://developer.android.com/reference/android/graphics/Cvavas.html).Sugiero el tutorial sobre [Crear vistas personalizadas] (http://developer.android.com/training/custom-views/index.html) para comenzar. Lea también el tema de la Guía [Componentes personalizados] (http://developer.android.com/guide/topics/ui/custom-components.html). –

1

Se puede utilizar una máscara de color, por ejemplo: un botón completamente rojo, al igual que la imagen que usted envió, el justo hacer Compruebe el color del píxel en contra del botón rojo, algo así como:

bool insideMyAwsomeShapeButton(int mouse_x,int mouse_y) { 
     if get_image_pixel_color_at_pos(mouse_x,mouse_y) == rgbcolor(1,0,0) 
    { 
      return true; 
    } 

      return false; } 

de nuevo, esta es solo un pensamiento, tienes que encontrar una aplicación api específica en Android para realizar la tarea, como comprobar el color del píxel.

+0

Hmm, esto parece ser algo que vale la pena investigar, ¿pero hay una forma de construir una imagen de la pantalla actual? – FabianCook