Je développe une petite application Android dans laquelle je mets en arrière-plan une ressource pouvant être dessinée pour une mise en page linéaire. Maintenant, ce que je veux faire change la couleur d’arrière-plan de la mise en page linéaire de manière dynamique, mais dans une ressource pouvant être dessinée . Mon code ressemble à ceci:
// 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 je mets en arrière plan pour la mise en page linéaire dans mon activité comme ça ...
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 ma ressource dessinable, ce qui signifie changer la couleur de ma mise en page linéaire avec un angle arrondi et un rembourrage défini dans drawable ..
J'ai essayé ceci de la manière 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 .... Merci.
Changer dynamiquement la couleur de la mise en page
LinearLayout Layout = (LinearLayout) findViewById(R.layout.id);
Layout.setBackgroundColor(Color.parseColor("#ffffff"));
Définir dynamiquement le dégradé de couleur d'arrière-plan
View layout = findViewById(R.id.mainlayout);
GradientDrawable Gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM,
new int[] {0xFF616261,0xFF131313});
Gd.setCornerRadius(0f);
layout.setBackgroundDrawable(Gd);
Vous pouvez essayer quelque chose comme ça:
Drawable sampleDrawable = context.getResources().getDrawable(R.drawable.balloons);
sampleDrawable.setColorFilter(new PorterDuffColorFilter(0xffff00,PorterDuff.Mode.MULTIPLY));
et pour plus d'informations, vous pouvez vous référer à:
Comment changer les couleurs d'un Drawable dans Android?
Changer de couleur dessinable par programme
Android: Changer la couleur de la forme au moment de l'exécution
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 changer les couleurs d'un Drawable dans Android?
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" />
Une approche consisterait à créer un deuxième fichier XML pouvant être dessiné avec la deuxième couleur, puis à modifier l’arrière-plan de la présentation avec le deuxième dessin.
Ce qui suit est idéal pour définir la couleur du dessinable par programmation sans changer de forme:
parentLayout.getBackground().setColorFilter(
Color.BLACK,
PorterDuff.Mode.SRC_ATOP
);