Wie wird der Farbverlauf animiert?

7

Wie man den Farbverlauf von Farbe 1 zu Farbe 2 animiert? Etwas Ähnliches wie

Ich plane, es als Health-bar für Einheit zu verwenden (also wird es finit Animation sein, die mit Grün anfängt und mit Rot endet)

    
Nexen 26.08.2015, 10:57
quelle

1 Antwort

23

Beim googeln habe ich zwei Möglichkeiten gefunden, dies für Android zu tun: benutze ShaderFactory oder erweitere View , mit new Shader(new LinearGradient()) . Beide Antworten machen das gleiche - Aufruf von new Shader() für jeden View.onDraw(Canvas canvas) Methodenaufruf. Es ist wirklich teuer, wenn die Anzahl solcher animierten Farbverläufe mehr als ~ 3 beträgt.

Also habe ich es anders gemacht. Ich vermied es, new alle onDraw() aufzurufen, indem ich eine einzige vorberechnete LinearGradient verwendete. So sieht es aus (gif, also animierte Animation):

Der Trick besteht darin, LinearGradient zu erstellen, was colorsCount mal größer ist als View.getWidth() . Danach kannst du canvas.translate() verwenden, während du den Farbverlauf zeichnest, um seine Farbe zu ändern, also ruft% new in onDraw() überhaupt nicht auf.

Um einen Verlauf zu erstellen, benötigen Sie die aktuelle Breite und Höhe. Ich habe es in onSizeChanged() gemacht. Auch hier habe ich Shader eingestellt.

%Vor%

Ich benutze Pfad wegen der Parallelogrammansichten, Sie können verwenden, was Sie wollen. Bei der Implementierung der Zeichnung sollten Sie zwei Dinge beachten: Sie müssen translate() whole canvas für den aktuellen Offset und offset() für Ihre Füllform verwenden:

%Vor%

Auch sollten Sie canvas.save() & amp; %Code%. Es wird die innere Matrix der Arbeitsfläche speichern und entsprechend wiederherstellen.

Das letzte, was Sie tun müssen, ist canvas.restore() zu animieren. Sie können alles verwenden, was Sie wollen ObjectAnimator (Property Animation) . Ich habe TimeAnimator verwendet, weil ich gradientOffset kontrollieren und den Offset direkt starten musste. Hier ist meine Erkenntnis (ein bisschen schwierig und hart):

%Vor%

Der vollständige Code updateTick finden Sie hier

    
Nexen 26.08.2015, 10:57
quelle