2012-06-01 13 views
11

Durante los últimos meses, construí un motor de interconexión de fuente abierta en Java (Universal Tween Engine) para poder agregar fácilmente animaciones suaves y transiciones a mis juegos de Android. Funciona como una brisa para juegos y es utilizado con éxito por muchas personas (principalmente en la comunidad LibGDX). La biblioteca es genérica y se puede usar para animar cualquier cosa (componentes de UI de Swing, objetos de juegos de OpenGL, etc.). Ahora, quiero crear un complemento para la lib dedicado a las IU de Android, ya que creo que puede facilitar enormemente la creación de animaciones muy complejas en comparación con el marco de animación incorporado.¿Cómo funcionan las animaciones de Android bajo el capó?

Mi lib expone un método .update(float deltaTime) que debe invocarse cada vez que desea actualizar todas las animaciones en ejecución. Fue diseñado para juegos ya que cada juego expone un ciclo infinito, pero ese no es el caso para las UI.

Por lo tanto, me preguntaba cómo funciona el marco de animación de la API de Android bajo el capó. ¿Hay un hilo estático dedicado a animaciones que se ejecuta continuamente y actualiza animaciones cuadro por cuadro y se pausa hasta que haya una nueva animación ejecutándose?

Estaba pensando en algo como that, pero no estoy muy contento con este código ya que no tiene en cuenta la frecuencia de actualización del dispositivo, por ejemplo.

+1

+1 para el buen enlace, gran biblioteca. – Orlymee

Respuesta

3

Un buen lugar para comenzar es echar un vistazo a cómo lo implementa el sistema de vista de Android. La alegría de la fuente abierta.

Cuando llama a .animate() en una vista, obtiene un ViewPropertyAnimator que, al iniciarAnimación(), inicia un ValueAnimator.

El ValueAnimator tiene un controlador que controla el ciclo.

https://github.com/CyanogenMod/android_frameworks_base/blob/ics/core/java/android/view/ViewPropertyAnimator.java

https://github.com/CyanogenMod/android_frameworks_base/blob/ics/core/java/android/animation/ValueAnimator.java

+1

Gracias por los enlaces. Parece que las animaciones no usan un hilo diferente, sino solo un manejador dedicado en la cola actual de mensajes de hilos. No estoy seguro de entender la estrategia detrás de esto, esto puede causar retraso y tartamudeos si se anima mientras hay mensajes que llegan al hilo ... –

+0

Ahora que recuerdo, leí algo hace un tiempo diciendo que Android hizo las animaciones de manera diferente que iOS Este último usa un hilo dedicado con una prioridad máxima. Esto lleva a animaciones muy suaves a expensas del procesamiento de datos y la capacidad de respuesta de UI. No estoy seguro de que no prefiera el modo iOS ... –

+0

Intentaré implementar el hilo/cola dedicado con prioridad máxima con el motor Tween para las IU de Android. Veremos si eso es más adecuado para el placer visual. Esto incluso puede llevar a una prueba de concepto de Google que pueden estar equivocados. –

Cuestiones relacionadas