2017-02-16 2 views
0

Ich versuche, einen Gradienten zu meiner Symbolleiste festlegen, aber es scheint wie setSize und setGradientCenter nicht funktionieren.GradientDrawable programmgesteuert erstellt: setSize und setGradientCenter Methoden funktionieren nicht

Ich muss es dynamisch erstellen, da die Mitte und die Höhe des Farbverlaufs abhängig von den Werten variieren, die ich von einem CMS bekomme, aber ich kann das nicht funktionieren. Egal, welche Werte ich für Größe und Mittelpunkt einstelle, der Gradient erhält immer die Größe der gesamten Symbolleiste und der Mittelpunkt ist der Standard.

Ich versuchte, muate() zuerst anzurufen, wie die Dokumentation sagt, ohne Ergebnis. Probieren Sie auch SetBounds mit dem gleichen Ergebnis

GradientDrawable gradientDrawable = new GradientDrawable(); 
     gradientDrawable.setOrientation(gradientData.getOrientation()); 
     gradientDrawable.setColors(gradientData.getColors()); 
     gradientDrawable.setGradientCenter(gradientData.getCenterX(), gradientData.getCenterY()); 

toolbar.setBackground(gradientDrawable); 

Fehle ich etwas? Orientierung ist immer linear, wenn das wichtig ist

+0

Verwendung 'ClipDrawable', wenn alles, was Sie wollen, ist ein weiterer Clip Drawable wodurch er breiter/kürzer, je nach Stromstärke – pskink

+0

@pskink Ich will nicht, es befestigen , weil ich nicht den ganzen Gradienten haben würde, wenn ich es täte. Wenn ich zum Beispiel eine Endfarbe habe, würde ich es nicht einmal sehen, wenn ich es abschneide. Ich will nur, dass der Gradient kürzer ist, oder modifiziere den Mittelpunkt, so dass der Gradient früher endet – moyo

+0

also benutze 'ScaleDrawable': * Ein Drawable, das die Größe eines anderen Drawable basierend auf seinem aktuellen Levelwert * – pskink

Antwort

1

Ich werde hier den Code verlassen, falls es für jemand anderen nützlich ist.

Dank @pskink Beispiel funktioniert es mit einem ScaleDrawable. Jetzt kann ich eine kleinere Steigung auf meine Werkzeugleiste:

int[] colors = { 
     Color.RED, Color.YELLOW, Color.RED 
}; 

Drawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors); 
final Drawable sd = new ScaleDrawable(gd, Gravity.TOP, 0, 1); 
sd.setLevel(7500); 

toolbar.setBackground(sd); 
Verwandte Themen