138 votes

Comment changer la couleur de la forme de manière dynamique ?

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 pourrait 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 ?

304voto

userSeven7s Points 14480

Vous pouvez le modifier simplement comme ceci

 GradientDrawable bgShape = (GradientDrawable)btn.getBackground();
bgShape.setColor(Color.BLACK);

61voto

Couitchy Points 161

Pour moi, il s'est écrasé car getBackground renvoyé un GradientDrawable au lieu d'un ShapeDrawable .

Je l'ai donc modifié comme ceci :

 ((GradientDrawable)someView.getBackground()).setColor(someColor);

46voto

Manuel V. Points 453

Cela fonctionne pour moi, avec une ressource xml initiale :

 example.setBackgroundResource(R.drawable.myshape);
GradientDrawable gd = (GradientDrawable) example.getBackground().getCurrent();
gd.setColor(Color.parseColor("#000000"));
gd.setCornerRadii(new float[]{30, 30, 30, 30, 0, 0, 30, 30});
gd.setStroke(2, Color.parseColor("#00FFFF"), 5, 6);

Résultat de ce qui précède : http://i.stack.imgur.com/hKUR7.png

11voto

Fabian Points 732

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 :

 /**
 * 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);
}

J'espère que cela t'aides. Greez Fabien

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X