Jetzt möchte ich, dass diese Form die Farbe basierend auf Informationen ändert, die ich von einem Webdienstaufruf zurückerhalte. Es könnte also vielleicht gelb oder grün oder rot oder was auch immer sein, abhängig von der Farbe, die ich vom Webservice-Anruf erhalte.
Wie kann ich die Farbe der Form ändern? Basierend auf diesen Informationen?
Wie von der @Couitchy-Methode ernannt View.getBackground() gibt a zurück GradientDrawable und nicht ein ShapeDrawable wodurch die App zur Laufzeit abstürzt, da beim Versuch, die Referenz abzurufen und die Farbe programmgesteuert festzulegen, eine ungültige Umwandlung vorliegt. [Android Shape doc]( developer.android.com/guide/topics/resources/…) Zustände: ZUSAMMENGESTELLTER RESSOURCENDATENTYP: Ressourcenzeiger auf a GradientDrawable.
– Luis Quijada
8. Juni 2013 um 15:37 Uhr
Mögliches Duplikat von Set android shape color programmatically
ich bekomme java.lang.ClassCastException: android.graphics.drawable.GradientDrawable cannot be cast to android.graphics.drawable.ShapeDrawable beim Ausprobieren dieses Vorschlags.
– prolink007
15. August 2013 um 18:37 Uhr
Funktioniert nicht. Sie erhalten einen Cast-Fehler. Benötigt eine Lösung oder eine andere akzeptierte Antwort
– ndgrün
30. Juni 2014 um 17:32 Uhr
Das funktioniert gut. Die vorherigen Kommentare sind veraltet, da die Antwort bearbeitet wurde!
– W3hri
6. Juli 2015 um 13:05 Uhr
sollte GradientDrawable verwenden bgShape = (GradientDrawable)btn.getBackground().getCurrent();
– Naveed148
9. September 2016 um 10:52 Uhr
Couchy
Bei mir stürzte es ab, weil getBackground zurückgegeben a GradientDrawable anstelle einer ShapeDrawable.
Dies ist die richtige Antwort. Beide oben genannten Antworten haben bei mir nicht funktioniert. Ich bekomme Ausnahme auf beides.
– Sanal Varghese
10. August 2017 um 7:49 Uhr
Sie können Ihre eigenen Formen in Java erstellen. Ich habe das für ein iPhone wie Page Controler gemacht und die Formen in Java gemalt:
/**
* Builds the active and inactive shapes / drawables for the page control
*/
private void makeShapes() {
activeDrawable = new ShapeDrawable();
inactiveDrawable = new ShapeDrawable();
activeDrawable.setBounds(0, 0, (int) mIndicatorSize,
(int) mIndicatorSize);
inactiveDrawable.setBounds(0, 0, (int) mIndicatorSize,
(int) mIndicatorSize);
int i[] = new int[2];
i[0] = android.R.attr.textColorSecondary;
i[1] = android.R.attr.textColorSecondaryInverse;
TypedArray a = this.getTheme().obtainStyledAttributes(i);
Shape s1 = new OvalShape();
s1.resize(mIndicatorSize, mIndicatorSize);
Shape s2 = new OvalShape();
s2.resize(mIndicatorSize, mIndicatorSize);
((ShapeDrawable) activeDrawable).getPaint().setColor(
a.getColor(0, Color.DKGRAY));
((ShapeDrawable) inactiveDrawable).getPaint().setColor(
a.getColor(1, Color.LTGRAY));
((ShapeDrawable) activeDrawable).setShape(s1);
((ShapeDrawable) inactiveDrawable).setShape(s2);
}
hoffe das hilft. Grüß Fabian
nilsi
Vielleicht muss jemand anders die Farbe im XML ändern, ohne mehrere drawables zu erstellen, wie ich es brauchte. Machen Sie dann einen Kreis ohne Farbe zeichenbar und geben Sie dann backgroundTint für die ImageView an.
Es gibt einen Fehler in Bezug auf diese Methode, der verhindert, dass sie auf Android Lollipop 5.0 (API-Ebene 21) funktioniert. Wurden aber in neueren Versionen behoben.
circleColor = (ImageView) view.findViewById(R.id.circleColor);
int color = Color.parseColor("#00FFFF");
((GradientDrawable)circleColor.getBackground()).setColor(color);
Nicht perfekt, aber hat mir geholfen, die Lösung zu finden.
– Rakesh Yadav
5. Mai 2018 um 10:22 Uhr
8840800cookie-checkWie ändere ich die Formfarbe dynamisch?yes
Wie von der @Couitchy-Methode ernannt
View.getBackground()
gibt a zurückGradientDrawable
und nicht einShapeDrawable
wodurch die App zur Laufzeit abstürzt, da beim Versuch, die Referenz abzurufen und die Farbe programmgesteuert festzulegen, eine ungültige Umwandlung vorliegt. [Android Shape doc]( developer.android.com/guide/topics/resources/…) Zustände: ZUSAMMENGESTELLTER RESSOURCENDATENTYP: Ressourcenzeiger auf aGradientDrawable
.– Luis Quijada
8. Juni 2013 um 15:37 Uhr
Mögliches Duplikat von Set android shape color programmatically
– CJay
24. April 2019 um 6:35 Uhr