Wie zu animieren Farbverlauf?
Wie zu animieren Farbverlauf von der Farbe#1 die Farbe#2? Etwas ähnliches
Ich Plane, verwenden Sie es als health-bar für die Einheit (also, es wird finit animation, beginnend mit grün und endend mit rot)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während googeln, ich fand 2 Möglichkeiten, es zu tun für android: verwenden ShaderFactory oder erweitert-Ansicht, mit
new Shader(new LinearGradient())
. Beide Antworten das gleiche tun - Aufrufnew Shader()
alleView.onDraw(Canvas canvas)
Methode nennen. Es ist wirklich teuer, wenn die Anzahl solcher animierte Farbverläufe mehr als ~3.Also hab ich es auf einen anderen Weg. Ich vermied aufrufen
new
alleonDraw()
mit einzelnen vorberechneteLinearGradient
. Das ist, wie es ist Aussehen (gif-animation so verwest) :Der trick ist, zu erstellen
LinearGradient
diecolorsCount
mal größer alsView.getWidth()
. Danach können Siecanvas.translate()
, während des Zeichnens, Verlauf, seine Farbe zu ändern, so dass keinenew
Anrufe inonDraw()
überhaupt.Erstellen Farbverlauf, müssen Sie die aktuelle Breite und Höhe. Ich habe es in
onSizeChanged()
. Auch ichShader
auch hier.Benutze ich Weg, weil der parallelogramy Ansichten, die Sie verwenden können, was Sie wollen. Bei der Umsetzung der Zeichnung, die Sie beachten sollten 2 Dinge: Sie müssen
translate()
ganzecanvas
auf den aktuellen offset undoffset()
Ihrer Füll-Form:Ebenfalls sollten Sie verwenden
canvas.save()
&canvas.restore()
. Es wird speichern Sie die innere matrix der Leinwand zu stapeln, und stellen Sie Sie entsprechend.Also das Letzte, was Sie tun müssen, ist zu animieren
gradientOffset
. Sie können alles benutzen, was Sie wollen, wie ObjectAnimator (Eigenschaft Animation). Ich verwendet TimeAnimator, weil ich brauchte, um die KontrolleupdateTick
- und Start-offset direkt. Hier ist meine Umsetzung (ein bisschen schwer und hart):Den vollen
View
- code finden Sie hierAsk Question
. Es ist ein checkAnswer your own question – share your knowledge, Q&A-style
Ich habe herausgefunden, verschiedene, Weise, kürzerer Weg. Verwenden Sie einfach
setColors (int[] colors)
Methode derGradientDrawable
animieren, dass er im Laufe der Zeit.Dies ist ein Beispiel, wie es zu tun:
Wird, und das Ergebnis:
nur rewrited @Krzysztof Misztal Antwort auf
java
:wo die
view
ist eine einfacheView
mit gradient-hintergrund:Ansicht :
hoffe, meine Antwort hilft
Die up-to-date alternative Antwort.