Android: Changement de Forme de Couleur lors de l'exécution
J'ai un drawable que j'ai utiliser comme arrière-plan pour un LinearLayout. Je voudrais changer la couleur de cette Forme dans l'exécution. J'ai essayé plusieurs méthodes.. mais aucun travail.
J'ai suivi la procédure décrite ici: http://www.anddev.org/android-2d-3d-graphics-opengl-problems-f55/change-shape-drawable-solid-color-t16798.html
Mais qui ont le même problème... il ne se bloque.. mais la couleur ne change!
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#00A6C1" />
<corners android:radius="@dimen/square_corners" />
</shape>
Extrait de code:
GradientDrawable drawable = (GradientDrawable) activity.getResources().getDrawable(R.drawable.blue_square_shape);
int color = ((Application) getApplication()).getColor();
drawable.setColor(color);
block.findViewById(R.id.blockSquare).setBackgroundDrawable(drawable);
findViewById(R.id.blockSquare).postInvalidate();
La moindre idée? J'ai passé toute la journée à googler... et ça devient assez gênant...
Mise à JOUR:
Quand j'essaie de faire la même chose pour cette Forme:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/shape" android:shape="rectangle">
<gradient android:startColor="#1FBCCF" android:endColor="#06A4C1"
android:angle="270" />
<corners android:topLeftRadius="@dimen/footer_corners"
android:topRightRadius="@dimen/footer_corners" />
</shape>
La couleur vire au noir... ce que j'imagine, dit-il, peut être changé...
- Juste une supposition. Le Drawable n'est pas mutatable, de sorte que vous devez créer une copie, et muter qu'un.
- Pourquoi, alors, elle se transforme en noir sur le second exemple?! :-S
- De quelle couleur vous le mettre? Noir?
- Pas de. Jaune. Une chose que j'ai remarqué, c'est que la couleur que je suis de passage est en mode RVB et il s'attend à ce ARGB. La couleur que j'utilise est une analyse d'une chaîne de caractères #RRGGBB.
- Faire dans ce cas utiliser les binaires OU de votre analysée nombre et 0xFF000000.
- Sans succès jusqu'à présent.. j'utilise maintenant une nouvelle Forme créée dans l'exécution. Ce n'est pas encore la solution que je cherchais. Modification de la couleur actuelle, il veux je veux vraiment..
- Je pense que toutes les réponses ici changer la couleur d'arrière-plan, mais pas de la couleur de l'image. Gi-je le droit? quelqu'un peut-il me dire s'il vous plaît? J'ai essayé toutes les solutions ici et aussi sur les mêmes questions sur stackoverflow, mais ils uniquement changer la couleur d'arrière-plan en mai cas. Donc, je pense, nous ne pouvons changer la couleur de fond, mais pas les images couleur. Je suis-je droit?
Vous devez vous connecter pour publier un commentaire.
Je suis en train de créer un Drawable comme un pré-compilateur.. comme je ne pouvais pas changer la couleur pour rien mais noir, même après avoir essayé l'hex OU décrits ci-dessous.
Le nouveau code:
De toute façon c'est une solution.. une solution pour la première question, est ce que je suis vraiment à la recherche d'! Je vais apprécier l'aide bien sûr!
Voir si quelque chose de semblable à ce qui fonctionne pour vous:
Dans mon cas, j'ai un TextView qui a un ShapeDrawable comme arrière-plan. Je voulais changer sa couleur et réussi à faire ce travail. Inexplicablement, tv2.getBackground() renvoie un GradientDrawable au lieu d'un ShapeDrawable -- ce qui a été signalé ailleurs.
Edit: Sur la couleur, essayez de définir une valeur alpha de 0xff. Si vous remarquez, même dans mon code au-dessus de la setColor() fonction prend un supplément de valeur hexadécimale en dehors de l'ordinaire RVB valeur hex. C'est pour l'Alpha/Opacité. Si ce paramètre est défini à 0x00 le Drawable aura une couleur noire, quel que soit le RVB (en supposant que votre couleur d'arrière-plan est noir). 0x00 est complètement transparent objet & 0xff est complètement opaque objet.
La méthode setColor correctement demande un renouvellement dans l'élément
(Si en xml vous avez utilisé le <figure> élément, il y aura toujours un GradientDrawable)
R.drawable.library_cirecle
Changer la couleur dans le code
Il y a un moyen plus simple:
C'est ce que je suis en train de faire un live wallpaper où j'ai modifier un Drawable au moment de l'exécution:
Edit: les déclarations de Type:
Edit 2:
Essayer dans ce cas:
Puis définissez la couleur.
Mon correctif en cours implique d'avoir un drawable sans l'option couleur. Je l'ai mis à l'intérieur d'un cadre de mise en page, puis définir la couleur d'arrière-plan de l'image objet de mise en page dynamique. Il est toujours techniquement un "fix", mais c'est le plus simple à mon avis.
Fichier De Mise En Page:
Date Rectangle Dessiné Fichier:
Rendu Dynamique:
Ensemble GradientDrawable Forme de la couleur en utilisant le code hex/valeur
Simplement le préfixe 0x à la valeur hexadécimale de la couleur.