Dies ist meine erste Frage hier auf Stackoverflow, also gehen Sie einfach auf mich. Ich versuche, einen radialen Bloom-Effekt um einen Punkt herum zu zeichnen und finde RadialGradient sowie GradientDrawable. Jedoch gibt keine vollständige Lösung.Wie man Größe, Position und Farbe eines RadialGradient einstellt oder XferMode auf GradientDrawable setzt
Hier ist, wie ich die Zeichnung gerade jetzt so mache:
//global
PorterDuffXfermode xferMode = new PorterDuffXfermode(PorterDuff.Mode.ADD);
Paint mainP = new Paint();
Paint whiteP = new Paint();
whiteP.setColor(Color.WHITE);
RadialGradient gradient;
// in a drawing method with a canvas
gradient = new RadialGradient((int) x, (int) y, tempRadius, mainP.getColor(),
0x00000000, Shader.TileMode.CL
mainP.setShader(gradient);
mainP.setXfermode(xferMode);
canvas.drawCircle((int) x, (int) y, tempRadius, mainP);
gradient = new RadialGradient((int) x, (int) y, tempRadius/2, whiteP.getColor(),
0x00000000, Shader.TileMode.CLAMP);
whiteP.setXfermode(xferMode);
whiteP.setShader(gradient);
canvas.drawCircle((int) x, (int) y, tempRadius/2, whiteP);
Dies gibt das erwartete Ergebnis:
jedoch die neue RadialGradient jedes Bild im Speicher aufbaut pro Punkt. Was später offensichtlich ein Problem wird. Die einzige öffentliche Sache in dieser Klasse ist ein Konstruktor. Alles, was Sie mit RadialGradient tun können, ist, jedes Mal, wenn Sie eine neue Größe, Position oder Farbe benötigen, ein neues Objekt zu erstellen. Der Grund, warum ich das so machen will, ist, dass Sie dem Paint-Objekt, mit dem Sie es zeichnen wollen, den Farbverlauf zuweisen, mit dem Sie setXferMode() verwenden können. Der andere Weg, mit GradientDrawable, ermöglicht es Ihnen, nur eine Instanz von sich selbst zu erstellen, so dass Sie die Größe, Position und Farbe ändern können, aber das Paint-Objekt, das verwendet wird, um sich selbst zu malen, ist privat Setzen Sie den XferMode nicht darauf. Das ist notwendig, damit Sie, wenn Sie mehr als einen Punkt haben, nicht nur übereinander malen. Es hat einen Farbfilter, aber es sieht nicht aus wie Farbfilter sich Sorgen um das Ziel macht, nur eine bestimmte Farbe und die Quelle.
Da ich neu bin, kann ich nur zwei Links posten, und anstatt nur zwei Bilder zu posten, verlinke ich auf die gleiche Frage, die ich auf reddit geschrieben habe, die alle Bilder für den Kontext enthält. (Und noch keine Antworten, weshalb ich hier bin, ha ha)
Also, wie sollte dies geschehen, ich weiß, ich brauche eine Klasse oder das andere. Soweit ich das beurteilen kann, wäre RadialGradient perfekt, wenn ich nicht jedes Mal ein neues erstellen müsste, wenn ich eine andere Größe, Position oder Farbe benötige. GradientDrawable wäre genauso groß, da Sie nur eine Instanz haben können, aber ich muss in der Lage sein, den XferMode auf die Farbe einzustellen, die er verwendet. Gibt es eine andere Klasse, oder fehlt mir etwas zwischen diesen beiden?
Danke !!