cómo dibujar líneas de conexión entre botones en android

Acabo de empezar a programar en Android y quiero dibujar una línea que conecte los botones en los que hago clic. Tengo un gridLayout con muchos botones que están definidos en el archivo XML principal. Me gustaría tener una línea recta dibujada desde el centro del primer botón en el que hice clic hasta el siguiente botón que presioné, y así sucesivamente (a veces termina en el primer botón en el que hice clic, por lo que tiene alguna forma). He investigado mucho sobre lienzos, animaciones, pero no sé por dónde empezar. Cualquier ayuda sería muy apreciada, gracias.

RG

PD: Eventualmente me gustaría animar las líneas de conexión, pero lo primero es lo primero.

preguntado el 12 de junio de 12 a las 20:06

¿Resolviste el problema? -

1 Respuestas

La mejor manera de hacer el dibujo sería anular el draw-método de tu GridLayout. Cabe destacar que no el onDraw método, ya que ese se llama antes las vistas de su hijo se dibujan y, por lo tanto, pondrían sus líneas en segundo plano. Recuerda llamar al método super antes haciendo tu dibujo.

Después de la primera pasada de diseño (es decir, después de onLayout ha sido llamado al menos una vez) las posiciones de sus botones deben inicializarse. Puede obtener sus posiciones relativas a sus padres llamando getLeft, getTop etc sobre ellos. Puede usar eso para calcular sus coordenadas centrales.

Tendrás que decirle a tu GridLayout de alguna manera en qué botones dibujar las líneas. La forma más fácil probablemente sería darle a cada botón un OnClickListener, y decirle a su padre (getParent) que se hizo clic y, por lo tanto, debería comenzar a dibujar líneas en consecuencia, por ejemplo, creando un conjunto de objetos de línea con las coordenadas de los botones en los que se hizo clic. Para forzar un redibujado del GridLayout después de cada clic puedes llamar invalidate en ella.

Respondido el 12 de junio de 12 a las 21:06

escribió específicamente que no debe anular el método onDraw, sino el método dibujar (aunque no estoy seguro de por qué, ya que cuando dibuja el contenido, la vista ya debería saber su tamaño y los tamaños de sus hijos): desarrollador.android.com/reference/android/view/… - desarrollador de Android

El método de dibujo se llama repetidamente cada vez que cambia algo en GridLayout que requiere que se vuelva a dibujar (principalmente después de que se llama a invalidate). OnClickListener simplemente "registra" un botón con GridLayout, y el método de dibujo simplemente dibuja todas las líneas de todos los botones previamente registrados cada vez que se llama. No importa si no hay líneas para dibujar la primera vez que se llama a dibujar. Simplemente llame a invalidar después de hacer clic en un botón y se volverá a llamar al sorteo. - Timo Ohr

Hay 3 métodos de dibujo en cada ViewGroup, "draw", "onDraw" y "dispatchDraw". "dispatchDraw" se encarga de dibujar las vistas secundarias y se llama después de se llama "onDraw". Ambos se llaman dentro del método "dibujar" de la clase ViewGroup. Entonces, si dibuja las líneas dentro de "onDraw", se sobredibujarán con una llamada posterior a "dispatchDraw". La mejor manera de entender esto realmente es mirar el código fuente de ViewGroup. Es posible que lo haya mezclado, pero creo que así es como funciona. Solo pruébalo. - Timo Ohr

Una respuesta muy informativa, de nuevo mi agradecimiento. Una pregunta final: todo esto se puede hacer en la clase de actividad y no es necesario hacerlo en una clase separada que amplíe View, ¿correcto? - russell geroche

No, tienes que subclasificar GridLayout para eso. Puede incluir su clase en un archivo de diseño utilizando el nombre de clase completo (es decir, ) - Timo Ohr

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.