Wie kann ich zeichnen Sie eine animierte Ansicht in android?
Erstellte ich eine benutzerdefinierte Ansicht von vorne. Erweiterte View
und overrided onDraw()
.
Wann kommt unten bei der Animation der anzeigen, Generiere ich eine benutzerdefinierte animation offsets zu verwenden.
zB.
while(!isOnTop){
mOffset++;
//draw the component a a it higher using the offset
if(position == 0)
isOnTop==true;
invalidate();
}
Ist das denken, dass meine frames kommen aus ungültig machen es selbst. Das problem ist, dass die Nichtigkeit dieser Ansicht kommen kann, nur durch scrollen ein listview-Steuerelement auf dem gleichen Bildschirm.
Diese "shared-Invalidierung()" bewirkt, dass die Verzögerung auf meine animation.So gibt es eine Möglichkeit aus, das lag?
Hast du irgendeinen anderen Vorschlag für die Durchführung von Animationen in dieser freigegebenen Umgebung?
Erstellen einer animation mit einem separaten thread berechnet die offset muss auch erzwungene Aufhebungs - () - Aufrufe zum anzeigen der animation (korrigiert mich wenn ich falsch Liege).
Ist die einzige Lösung, die zum ausführen der animation in zB 10 aufhebungsanforderungen mit einem größeren Schritt? Es wird einfach das hinken, aber ich denke, dass ich verwenden können einen anderen Ansatz auf, der.
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Was das beste" hängt natürlich stark auf genau das, was Sie zu tun versuchen. Sie haben nicht gesagt, was Sie versuchen zu erreichen, so können wir nur erahnen kann, was am besten für Sie sein.
Hier sind einige einfache Dinge:
Wenn Sie wollen, animieren von bitmap-Bildern AnimationDrawable: http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
Wenn Sie wollen, animieren die Bewegung der Ansichten innerhalb der Hierarchie verwenden der Ansicht-animation-framework: http://developer.android.com/guide/topics/graphics/view-animation.html
Dem neuen Allgemeinen Animations-framework kann eine Menge mehr Dinge, die ein ist oft einfacher zu verwenden: http://developer.android.com/guide/topics/graphics/animation.html. Dies ist nativ verfügbar in Android 3.0+, kann aber auch verwendet werden, in der Android-API-level 7 mit dem support v7 library.
Wenn Sie möchten, schreiben Sie eine benutzerdefinierte widget, das ist ein integrierter Teil Ihrer view-Hierarchie und manuell hat seine eigene animation der Zeichnung, können Sie einen Handler zu Zeit die updates (in der Regel werden Sie wollen 60fps oder 20ms zwischen den einzelnen invalidate()) und dann in Ihrer onDraw () - Methode zeichnen Sie Ihre Ansicht ist-Zustand basierend auf den SystemClock.uptimeMillis() als ein delta aus, wenn die animation gestartet.
Hier ist eine einfache wiederholte erlöschen mit Hf:
Da ist diese Frage von einigem Interesse, werde ich Antworten.
Der beste Weg, um zu werden, eine separate canvas-thread. Eine "eigene" Leinwand kann nur erreicht werden, mit einem
SurfaceView
. LunarLanding ist ein exzellentes Beispiel für diese Verwendung. Jeder frame einzeln berechnet wird als die Haupt-view-sharing nur CPU-Zeit, nicht in der Zeichnung Zeit. Daher ist schneller, auch mit der Kombination von e.g eine normale Ansicht in der Spitze und eine Animation anzeigen, an der Unterseite.Aber Sie haben, um ein Intervall einzustellen, wenn Sie in einer gemeinsam genutzten Umgebung. Das Intervall wird verwendet für das FPS cap. Wenn Sie nicht setzen FPS cap dann ist die CPU running wild verwalten, um eine gute animation zu der
SurfaceView
wenn es allein war. Capping es bei 60 fps oder noch weniger wird den trick tun zeichnen Sie alle Ansichten, effizient mit keine CPU-überlastung.So finden Sie in der zeichnen-thread von der Mondlandung aus dem API-demos und stellen ein FPS cap.
//ps: Sie können immer 16 statt 1000/fps bei 60FPS zu vermeiden, die Berechnung jedes mal
und dann die Zeichnung thread wird in etwa so Aussehen: