Jeu android de la forme de la couleur par programmation
Je suis d'édition pour rendre la question plus simple, en espérant que l'aide à une réponse précise.
Dire que j'ai la suite oval
forme:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<solid android:angle="270"
android:color="#FFFF0000"/>
<stroke android:width="3dp"
android:color="#FFAA0055"/>
</shape>
Comment puis-je définir la couleur de la programmation, de l'intérieur d'une activité de classe?
- Que faites-vous définir cette drawable pour?
- Le drawable est un
oval
et c'est le fond de l'ImageView. - Si cette question posée est trop difficile, il est un moyen de tirer plusieurs images sur une toile et de définir les couches de produit final que l'arrière-plan de la vue?
- Vous pouvez l'obtenir par l'extension de la
View
classe, et en l'utilisant commebase
vue d'une mise en page qui permet le chevauchement des widgets(RelativeLayout
,FrameLayout
). À l'intérieur de cette étendueView
classe, vous pouvezdraw multiple images onto a canvas
. Mais, avant cela, jetez un oeil à ce --> Lien (si vous ne l'avez pas déjà).
Vous devez vous connecter pour publier un commentaire.
Note: Réponse a été mise à jour pour couvrir le scénario où
background
est une instance deColorDrawable
. Grâce Tyler Pfaff, de souligner ce point.Obtenir le
Drawable
deimageView
à l'aide degetBackground()
:De contre-vérifier les suspects habituels:
Version compacte:
Noter que nulle vérification n'est pas nécessaire.
Cependant, vous devez utiliser
mutate()
sur l'un drawable avant de les modifier s'ils sont utilisés ailleurs. (Par défaut, un drawable chargé de XML partagent le même état.)solid
partie de la forme. Comment au sujet de lastroke
partie?@username
dans votre commentaire pour vous assurer une notification est envoyée à l'utilisateur. Par le chemin, vous aurez besoin à la sous-classeShapeDrawable
dans le but de définir le contour de la partie. Plus d'infos ici: Lien. Regarde le commentaire qu'il mentionne un problème avec la accepté de répondre.ImageView's
arrière-plan est unGradientDrawable
,getBackground()
ne sera pas de retour d'unShapeDrawable
. Au lieu de cela, utilisez laGradientDrawable
qui est retourné:GradientDrawable gradientDrawable = (GradientDrawable)imageView.getBackground();
....gradientDrawable.setColors(new int[] { color1, color2 });
.ColorDrawable
. Merci de souligner ce point.ShapeDrawable
, pasDrawable
- d'où le cast explicite.setColor(int)
n'est pas disponible pourDrawable
ou tout parent deGradientDrawable
&ColorDrawable
- d'où les conversions explicites.<shape>
ressource était en fait un GradientDrawable au lieu d'un ShapeDrawable. Votre définissant les options et la façon de raconter qui il était m'a sauvé beaucoup de temps.Faire comme ceci:
android:background
dans votre xml ou mêmesetBackground
de l'activité avant d'appelergetBackground()
? Il devrait fonctionner si vous ne l'avait fait.Une solution plus simple aujourd'hui serait d'utiliser votre forme comme un arrière-plan, puis par programme changer sa couleur via
EDIT:
Comme quelqu'un l'a justement fait remarquer dans les commentaires, vous pouvez vouloir utiliser
PorterDuff.Mode.SRC_ATOP
au lieu de cela, si votre formation a des coins arrondis etc.Voici la documentation officielle avec plus de détails sur les différents
PorterDuff.Mode
options que vous avez.view.getBackground().setColorFilter(Color.parseColor("#343434"), PorterDuff.Mode.SRC_ATOP);
Puisqu'il peut y avoir une frontière à l'arrière-plan ou arrondis courners.getBackground()
appel. Mon imageview.src contenait une forme et j'ai utilisé:imageIndicator.setColorFilter(toggleColor, PorterDuff.Mode.SRC_ATOP);
oùtoggleColor
est juste un int que précédemment stocké le résultat de getColor()Essayez ceci:
pour plus de détails consultez ce lien cette
espère aider.
espère que cela aidera quelqu'un avec le même problème
gd.setStroke(width_px, Color.parseColor("#FF5722"));
Expansion sur Vikram est réponse, si vous colorez les vues dynamiques, comme recycleur afficher les éléments, etc.... Alors, vous voulez probablement appel muter() avant de définir la couleur. Si vous ne le faites pas, toutes les opinions qui ont en commun un drawable (j'.e un arrière-plan) auront aussi leur drawable changé/couleur.
if (background instanceof LayerDrawable) { background = ((LayerDrawable) background.mutate()).getDrawable(indexIfLayerDrawable); } if (background instanceof ShapeDrawable)[...]
de traiter avec des arrière-plans présentations qui utilisent<layer-list ... <item ...
.Cette question a été répondu à un certain temps en arrière, mais il peut modernisé par une réécriture comme un kotlin fonction d'extension.
c'est la solution qui fonctionne pour moi...il a écrit dans une autre question ainsi:
Comment changer de forme, de couleur de façon dynamique?
Rien de travailler pour moi mais quand j'ai mis la couleur de teinte, il travaille sur la Forme Drawable
nécessite android 5.0 API 21
La manière la plus simple pour remplir la forme avec le Rayon est: