Comment changer la couleur des formes dessinables dans android

je suis en train de développer une petite application android dans laquelle j'ai défini drawable resource comme arrière-plan pour le layout linéaire. Maintenant ce que je veux faire changer la couleur de fond de la mise en page linéaire de façon dynamique, mais dans la ressource dessinable. Mon code ressemble à:

//  bcd.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item>        
    <shape>
        <gradient
            android:endColor="#22000000"
            android:startColor="#22000000"
            android:angle="270" />
        <stroke
            android:width="3dp"
            android:color="@color/white" />
        <corners
            android:radius="3dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>

<LinearLayout 
android:id="@+id/lin_llt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>

et j'ai mis en arrière-plan pour la disposition linéaire dans mon activité comme ceci...

parentLayout = (LinearLayout) view.findViewById(R.id.lin_llt);
parentLayout.setBackgroundResource(R.drawable.bcd);

Maintenant, ce que je veux faire je veux changer la couleur de mon ressource dessinable qui signifie changer la couleur de ma disposition linéaire avec coin arrondi et rembourrage définir dans dessinable..

j'ai essayé de la façon suivante

ShapeDrawable bgShape = (ShapeDrawable )parentLayout.getBackground();
bgShape.getPaint().setColor(Color.BLACK);

mais ça ne marche pas pour moi. toute autre solution .

Alors, comment le faire... Besoin d'aide... remercier...

25
demandé sur nilkash 2013-02-28 08:11:41

5 réponses

changer la couleur de la mise en page dynamiquement

LinearLayout Layout = (LinearLayout) findViewById(R.layout.id);
Layout.setBackgroundColor(Color.parseColor("#ffffff"));

régler dynamiquement le gradient de couleur de fond

View layout = findViewById(R.id.mainlayout);

GradientDrawable gd = new GradientDrawable(
        GradientDrawable.Orientation.TOP_BOTTOM,
        new int[] {0xFF616261,0xFF131313});
gd.setCornerRadius(0f);

layout.setBackgroundDrawable(gd);
26
répondu APriya 2013-07-06 07:51:46

vous pourriez essayer quelque chose comme ceci:

Drawable sampleDrawable = context.getResources().getDrawable(R.drawable.balloons); 
sampleDrawable.setColorFilter(new PorterDuffColorFilter(0xffff00,PorterDuff.Mode.MULTIPLY));

et pour plus vous pouvez vous référer à:

Comment changer les couleurs d'un Drawable dans Android?

changer de couleur à dessiner programmatiquement

Android: changer la couleur de la forme dans le runtime

http://pastebin.com/Hd2aU4XC

vous pouvez aussi essayer ceci:

private static final int[] FROM_COLOR = new int[]{49, 179, 110};
private static final int THRESHOLD = 3;

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test_colors);

    ImageView iv = (ImageView) findViewById(R.id.img);
    Drawable d = getResources().getDrawable(RES);
    iv.setImageDrawable(adjust(d));
}

private Drawable adjust(Drawable d)
{
    int to = Color.RED;

    //Need to copy to ensure that the bitmap is mutable.
    Bitmap src = ((BitmapDrawable) d).getBitmap();
    Bitmap bitmap = src.copy(Bitmap.Config.ARGB_8888, true);
    for(int x = 0;x < bitmap.getWidth();x++)
        for(int y = 0;y < bitmap.getHeight();y++)
            if(match(bitmap.getPixel(x, y))) 
                bitmap.setPixel(x, y, to);

    return new BitmapDrawable(bitmap);
}

private boolean match(int pixel)
{
    //There may be a better way to match, but I wanted to do a comparison ignoring
    //transparency, so I couldn't just do a direct integer compare.
    return Math.abs(Color.red(pixel) - FROM_COLOR[0]) < THRESHOLD && Math.abs(Color.green(pixel) - FROM_COLOR[1]) < THRESHOLD && Math.abs(Color.blue(pixel) - FROM_COLOR[2]) < THRESHOLD;
}

, comme indiqué dans Comment modifier les couleurs d'un Drawable dans Android?

10
répondu lokoko 2017-05-23 11:47:13

utilisez ceci..

<solid android:color="#e1e1e1" />

<stroke
    android:width="2dp"
    android:color="#808080" />

<corners android:radius="10dp" />

<padding
    android:bottom="5dp"
    android:left="5dp"
    android:right="5dp"
    android:top="5dp" />

2
répondu jigar 2013-07-04 13:08:25

L'une des approches serait de créer un second XML dessinable avec la deuxième couleur, puis de changer le fond de la mise en page avec le deuxième dessinable.

1
répondu AndroidGuy 2013-02-28 04:50:09

les œuvres suivantes grand pour la fixation de la couleur de l'étirable programmatically sans changer sa forme:

parentLayout.getBackground().setColorFilter(
    Color.BLACK,
    PorterDuff.Mode.SRC_ATOP
);
0
répondu DaveNOTDavid 2018-03-27 14:10:56