Wie male ich eine Farbverlaufsfarbe in Android auf einem Canvas mit der Farbänderung?

9

Ich muss den Hintergrund meiner Canvas eine Farbe mit Schattierung / Farbverlauf aufgetragen, aber jeder onDraw Aufruf möchte ich möglicherweise die Farbe ändern.

Ich habe Probleme, dies zu tun, ohne ein neues Objekt jedes onDraw Aufruf zu erstellen. Hat jemand Ideen? Wenn ich drawPaint () verwende und einen neuen shader () auf meine Farbe setze, dann habe ich ein neues Shader-Objekt erstellt und wenn ich ein neues GradientDrawable () erstelle, habe ich auch. Ich möchte GC vermeiden.

Ich dachte, ich könnte ein GradientDrawable () -Objekt wiederverwenden und die .setColor () -Methode aufrufen, aber dies setzt nur alle zugehörigen Farbverlaufsdaten zurück und malt das Zeichenbare als Volltonfarbe.

Jeder?

    
Greg 18.01.2011, 23:28
quelle

3 Antworten

5

Leider müssen Sie jedes Mal einen neuen LinearGradient erstellen. Beachten Sie, dass Sie kein GradientDrawable verwenden müssen. Sie können die Form selbst mit einem Paint zeichnen, für das Sie den Shader festlegen.

    
Romain Guy 18.01.2011 23:44
quelle
0

Ich denke, was Sie tun wollen, ist dies. Erstellen Sie ein Layer Drawable und fügen Sie dann zwei Drawables ein. Der erste Drawable, den Sie einfügen, sollte seine Farbe auf die Farbe eingestellt haben, die Ihr Hintergrund haben soll, und der zweite sollte ein Gradient sein, der auf Schwarz und Übergang von Alpha 0 auf Alpha 255 eingestellt ist.

Weitere Informationen finden Sie unter: Ссылка

    
Nick Campion 18.01.2011 23:45
quelle
0

Diese Frage ist noch fast Mitte 2017 gültig. Ich wollte einen glatten Übergang für Farbänderungen für meine benutzerdefinierte Ansicht erstellen. Ich habe Shader mit LinearGradients verwendet.

Meine Absicht war es, einen reibungslosen Übergang zwischen einem fähigen und einem behinderten Zustand meiner Ansicht zu erreichen.

Mein Fall ist aufgrund der Konstruktion und des Zwecks der Ansicht noch komplizierter. Es ist ein Schieberegler. Meine Ansicht besteht also aus fast zwei identischen Ebenen, die mit Hilfe von Canvas über die zweite Ebene gezogen werden. Drittes Element ist ein Zeiger.

Beide Ebenen verwenden LinearGradients, Zeiger verwenden eine einzelne Farbe.

Summiere alles, was ich tun muss, um zwischen 5 Farben gleichzeitig zu wechseln:

  • Start- und Endfarbe für die unterste Ebene - ein LinearGradient,
  • Start- und Endfarbe für die oberste Ebene - zweiter LinearGradient,
  • Zeigerfarbe - normale Farbe;

Lösung ist, 5 separate ValueAnimators zu haben. Am wichtigsten ist die Verwendung von ValueAnimator.ofArgb ():

%Vor%

Ich hatte auch Bedenken, bei jedem Animationsupdate einen neuen LinearGradient zu erstellen, aber dann startete ich ein GPU-Profiling auf dem Gerät mit "Am Bildschirm als Balken". Alles ist in Ordnung und läuft innerhalb sicherer Grenzen.

    
lewylewus 28.04.2017 09:57
quelle

Tags und Links