j'ai
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="#FFFF00" />
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
</shape>
<TextView
android:background="@drawable/test"
android:layout_height="45dp"
android:layout_width="100dp"
android:text="Moderate"
/>
Alors maintenant, je veux que cette forme change de couleur en fonction des informations que je reçois d'un appel de service Web. Cela peut donc être jaune, vert ou rouge ou autre, selon la couleur que je reçois de l'appel de service Web.
Comment puis-je changer la couleur de la forme? Sur la base de ces informations?
View.getBackground()
retourne unGradientDrawable
et non un,ShapeDrawable
ce qui provoque le blocage de l'application au moment de l'exécution, en raison d'une distribution non valide lors de la tentative d'obtention de la référence et de la définition de la couleur par programme. [Android Shape doc] ( developer.android.com/guide/topics/resources/… ) indique: DATATYPE DE RESSOURCES COMPILÉES: pointeur de ressource vers un fichierGradientDrawable
.Réponses:
Vous pouvez le modifier simplement comme ceci
la source
java.lang.ClassCastException: android.graphics.drawable.GradientDrawable cannot be cast to android.graphics.drawable.ShapeDrawable
en essayant cette suggestion.Pour moi, il s'est écrasé car
getBackground
renvoyé unGradientDrawable
au lieu d'unShapeDrawable
.Alors je l'ai modifié comme ceci:
la source
Cela fonctionne pour moi, avec une ressource xml initiale:
Résultat de ce qui précède: http://i.stack.imgur.com/hKUR7.png
la source
Vous pouvez créer vos propres formes en Java. J'ai fait cela pour un iPhone comme Page Controler et j'ai peint les formes en Java:
J'espère que cela t'aides. Greez Fabian
la source
Peut-être que quelqu'un d'autre doit changer de couleur dans le XML sans créer plusieurs dessinables comme j'en avais besoin. Ensuite, créez un cercle dessinable sans couleur, puis spécifiez backgroundTint pour ImageView.
circle.xml
Et dans votre mise en page :
Éditer:
Il y a un bug concernant cette méthode qui l'empêche de fonctionner sur Android Lollipop 5.0 (API niveau 21). Mais ont été corrigés dans les versions plus récentes.
la source
la source
circle.xml (dessinable)
disposition
en activité
la source
Cette solution a fonctionné pour moi en utilisant le sdk android v19:
la source
Si vous avez une imageView comme celle-ci:
qui lui donnent une forme dessinable comme src, vous pouvez utiliser ce code pour changer la couleur de la forme:
la source
Ma forme xml:
Mon activité xml:
Mon activité java:
Image de résultat : résultat
la source
Le moyen le plus simple de remplir la forme avec le rayon est:
XML:
Java:
la source
J'essaye la réponse de Ronnie et mon application s'est plantée. Ensuite, je vérifie mon xml dessinable. Cela ressemble à ceci:
. Je l'ai changé en ceci: (également changé les attributs)
Ça marche.
Pour ceux qui rencontrent le même problème.
la source
drawable_rectangle.xml
Affichage
la source
Vous pouvez utiliser un adaptateur de liaison (Kotlin) pour y parvenir. Créez une classe d'adaptateur de liaison nommée ChangeShapeColor comme ci-dessous
Créez une forme dessinable dans le dossier res / drawable. J'ai créé un cercle
Enfin renvoyez-le à votre vue
la source