2010-09-29 23 views
12

Tengo una vista que es redonda y se desplaza hacia arriba (-> en la dirección del eje z que sale de la pantalla) el contenido principal. Cuando alguien toca la pantalla, quiero que se seleccione el contenido principal o la vista que se encuentra arriba, cuando cubre la vista principal.Android: puedo crear una vista/lienzo que no sea rectangular, pero p. ¿redondo?

Hasta el momento eso funciona perfectamente. Tengo un artículo redondo en un lienzo transparente. Lo que significa que puedes ver todo el fondo que está fuera de ese círculo. Sin embargo, no puede seleccionarlo, porque sigue siendo el lienzo estacionario, solo con una pintura transparente.

Ahora me pregunto, para resolver este problema, si es posible hacer la vista/lienzo en forma de forma redonda?


actualización

he añadido una imagen para una mejor explicación lo que trato de lograr. alt text

+0

¿Puedes manejar la detección de colisiones tú mismo, obtener un XY en tu evento táctil y si está fuera del radio no manejar la entrada? – schwiz

+0

Bueno, ya tengo eso. Sin embargo, quiero que el evento táctil lo maneje la capa principal en segundo plano, p. el cuadro de texto. – znq

+0

Si devuelve falso en el evento táctil debe pasar el incluso a lo siguiente en la línea. A veces, esto es muy complicado de lograr correctamente dependiendo de la jerarquía de diseño pero estás en el camino correcto. Si publica sus archivos xml de diseño y oyentes de prueba, podremos descubrir algo. – schwiz

Respuesta

4

Por lo que yo sé, es imposible. He comprobado las fuentes de View.java en git.kernel.org y se basa en la clase Rect - rects define posición, tamaño, regiones para invalidar, etc. ("La geometría de una vista es la de un rectángulo". De los comentarios. en View.java)

En cuanto a la clase Canvas, generalmente se construye sobre Bitmap o GL. Bitmap es definitivamente un rectange (una matriz), por lo que el lienzo parece representar una redecilla también. Si se usa GL, se especifica una ventana gráfica (que también es un rectángulo).

Parece ser la forma más obvia de comprobar si las coordenadas que se pasaron a su método onTouch() se ajustan a su región y devuelven falso si no lo hacen. Luego, el evento pasará a la Vista a continuación y deberá procesar el evento.

+1

Gracias zserge por la respuesta detallada. El último punto mencionado es exactamente lo que estoy haciendo ahora, pero tengo algunos otros problemas con eso, que he descrito aquí: http://stackoverflow.com/questions/3832893/android-delegate-touch-event-to- vista de subsuelo – znq

-3

Debe especificar Android Selector para evitar la imagen que se desplaza por defecto.

+0

Quizás no me explique correctamente, pero agregué una imagen para aclarar. No creo que Selector sea la solución para eso, pero si me equivoco, házmelo saber. – znq

+0

¿Puedes explicar qué es ese círculo? es una imagen que debería mostrarse siempre? debería tener un selector? Puedo acceder utilizando el dpad? – Macarse

+0

El círculo es una especie de "pop-up" que se cierne sobre la capa principal. Está en el eje z saliendo de la pantalla sobre la vista de contenido principal. Puede verlo como un AlertDialog, pero redondo en lugar de rectangular y la posibilidad de seleccionar elementos del fondo. – znq

Cuestiones relacionadas