2012-06-01 35 views
11

Negli ultimi mesi, ho creato un motore di interpolazione open source in Java (Universal Tween Engine) per poter aggiungere facilmente animazioni e transizioni fluide ai miei giochi Android. Funziona come un gioco da ragazzi e viene utilizzato con successo da molte persone (principalmente nella comunità LibGDX). La libreria è generica e può essere utilizzata per animare qualsiasi cosa (componenti dell'interfaccia utente di Swing, oggetti di gioco opengl, ecc.). Ora, voglio creare un addon alla libreria dedicata alle interfacce utente Android, poiché ritengo che possa facilitare notevolmente la creazione di animazioni molto complesse rispetto al framework di animazione incorporato.Come funzionano le animazioni Android?

La mia libreria espone un metodo .update(float deltaTime) che deve essere chiamato ogni volta che si desidera aggiornare tutte le animazioni in esecuzione. È stato adattato per i giochi poiché ogni gioco espone un ciclo infinito, ma non è il caso delle interfacce utente.

Pertanto, mi chiedevo come funziona il framework di animazione dell'API Android sotto il cofano. Esiste un thread statico dedicato alle animazioni che viene eseguito continuamente e aggiorna le animazioni fotogramma per fotogramma e viene messo in pausa fino a quando non viene eseguita una nuova animazione?

Stavo pensando a qualcosa come that, ma non sono molto contento di questo codice poiché non tiene conto della frequenza di aggiornamento del dispositivo, ad esempio.

+1

+1 per il link bello, grande biblioteca. – Orlymee

risposta

3

Un buon punto di partenza è dare un'occhiata a come il sistema di visualizzazione Android lo implementa. La gioia dell'open source.

Quando si chiama .animate() su una vista, si ottiene un ViewPropertyAnimator che, all'avvioAnimazione() avvia un ValueAnimator.

ValueAnimator dispone di un gestore che gestisce il 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

Grazie per i collegamenti. Sembra che le animazioni non utilizzino un thread diverso, ma solo un gestore dedicato nella coda dei messaggi thread corrente. Non sono sicuro di capire la strategia alla base di questo, questo può causare lag e balbuzie se si anima mentre ci sono messaggi che arrivano al thread ... –

+0

Ora che mi ricordo, ho letto qualcosa qualche tempo fa dicendo che Android ha fatto le animazioni in modo diverso di iOS. Quest'ultimo utilizza un thread dedicato con una priorità massima. Ciò porta ad animazioni molto fluide a scapito dell'elaborazione dei dati e della reattività dell'interfaccia utente. Non sono sicuro di non preferire il modo iOS ... –

+0

Cercherò di implementare la thread/coda dedicata con priorità massima con Tween Engine per le interfacce utente Android. Vedremo se è più adatto al piacere degli occhi. Questo potrebbe anche portare a Google una prova di concetto che potrebbero essere sbagliati. –

Problemi correlati