2012-06-01 3 views
11

In den letzten Monaten habe ich eine Open-Source-Tweening-Engine in Java (Universal Tween Engine) erstellt, um problemlos Animationen und Übergänge zu meinen Android-Spielen hinzufügen zu können. Es funktioniert wie ein Kinderspiel für Spiele und wird erfolgreich von vielen Leuten benutzt (meistens in der LibGDX Gemeinschaft). Die Bibliothek ist generisch und kann verwendet werden, um alles zu animieren (Swing UI-Komponenten, Opengl-Spielobjekte usw.). Nun möchte ich ein Addon für die lib erstellen, das für Android-Benutzeroberflächen gedacht ist, da es meiner Meinung nach die Erstellung sehr komplexer Animationen im Vergleich zum integrierten Animationsframework erheblich erleichtern kann.Wie funktionieren die Android-Animationen unter der Haube?

Meine Lib enthält eine .update(float deltaTime) Methode, die jedes Mal aufgerufen werden muss, wenn Sie alle laufenden Animationen aktualisieren möchten. Es wurde auf Spiele zugeschnitten, da jedes Spiel eine Endlosschleife darstellt, aber das ist bei UIs nicht der Fall.

Daher habe ich mich gefragt, wie das Animationsframework der Android API unter der Haube funktioniert. Gibt es einen statischen Thread für Animationen, der kontinuierlich ausgeführt wird und die Animationen Frame für Frame aktualisiert und angehalten wird, bis eine neue Animation läuft??

Ich habe über etwas wie that nachgedacht, aber ich bin nicht wirklich glücklich mit diesem Code, da es zum Beispiel die Aktualisierungsrate des Geräts nicht berücksichtigt.

+1

+1 für den netten Link, große Bibliothek. – Orlymee

Antwort

3

Ein guter Anfang ist es, einen Blick darauf zu werfen, wie das Android View System es implementiert. Die Freude an Open Source.

Wenn Sie .animate() in einer Ansicht aufrufen, erhalten Sie einen ViewPropertyAnimator zurück, der bei startAnimation() einen ValueAnimator startet.

Der ValueAnimator hat einen Handler, der die Schleife antreibt.

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

Danke für die Links. Anscheinend verwenden Animationen keinen anderen Thread, sondern nur einen dedizierten Handler für die aktuelle Nachrichtenwarteschlange. Ich bin mir nicht sicher, ob ich die Strategie dahinter verstehe, das kann zu Verzögerungen und Stottern führen, wenn es Animationen gibt, während Nachrichten zum Thread kommen ... –

+0

Nun, da ich mich erinnere, habe ich vor einiger Zeit gelesen, dass Android die Animationen anders gemacht hat als iOS. Letzterer verwendet einen dedizierten Thread mit einer maximalen Priorität. Dies führt zu sehr weichen Animationen auf Kosten der Datenverarbeitung und UI-Reaktionsfähigkeit. Ich bin mir nicht sicher, dass ich iOS nicht bevorzuge ... –

+0

Ich werde versuchen, das dedizierte Thread/Warteschlange mit maximaler Priorität mit der Tween-Engine für Android-UIs zu implementieren. Wir werden sehen, ob das für Augenvergnügen besser geeignet ist. Dies kann sogar zu einem Proof-of-Concept für Google führen, dass sie falsch liegen könnten. –