Diseño personalizado de Android

Ayer pasé algún tiempo luchando con diseños de Android (... o mejores diseños personalizados). Para propósitos generales, los diseños listos para usar que ofrecen los androides son más que suficientes. Pero cuando se trata de casos de uso más complejos (tomemos el ejemplo del carrusel con superposición de imágenes que se colocan en una ruta elíptica), rápidamente me di cuenta de la limitación y la complejidad de las API de Android. Este fue mi enfoque:

El uso de diseños listos para usar no es una opción (para muchos problemas que no se pueden manejar), sin embargo, la necesidad de objetos gráficos que se puedan agregar a un contenedor (por ejemplo, ImageView) es necesaria para realizar fácilmente la traducción, rotaciones, etc ... a través de la animación incorporada.

AbsoluteLayout parece el diseño más razonable disponible para este propósito. Permite agregar objetos de vista derivados y escribir su propio algoritmo para posicionarlos. Pero ... está en desuso. ¡Es una pena! ¿Quién quiere usar apis en desuso?

El siguiente paso más razonable es escribir su propio diseño subclasificando el místico ViewGroup ... y aquí es donde todo se desmorona (al menos lo hizo para mí). Es complicado, engañoso y complicado hacerlo tanto como escribir su propio diseño personalizado para swing (en realidad lo hice hace años, y recuerdo ser más simple).

Luego (impulsado por la desesperación) subclasificar una vista, anular el método onDraw y dibujar directamente en un lienzo parece la única solución directa (aunque esto me recuerda los días de java2D ... largas horas dedicadas a lograr el alto 1% de su proyecto), pero luego está renunciando a las prácticas API de animación incorporadas que desea aplicar a los gráficos dibujados en el lienzo.

La conclusión es que, a menos que me haya perdido algo, la arquitectura actual de Android está un poco lejos del paradigma de programación que ofrecen otras tecnologías de interfaz de usuario como flash o javafx (puedo implementar fácilmente el carrusel descrito anteriormente en javafx y flash). La razón es que, por ejemplo, en javafx, el objeto Scene (comparable al concepto View de Android) ofrece por defecto un diseño absoluto. Luego puede aplicar otros diseños listos para usar si lo desea. Pero para escenarios donde es necesario un diseño personalizado, no tiene que hacer nada.

Me sorprende un poco que esta opción no esté disponible en Android, después de todo, es una necesidad bastante común que se aborda en otras tecnologías de interfaz de usuario. Todavía me gusta pensar que hay una quinta opción en Android que no he encontrado. ¿Algún experto por ahí que pueda proporcionar alguna información sobre el tema?

Gracias.

Respuestas a la pregunta(4)

Su respuesta a la pregunta