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...
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);
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
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?
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" />
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.
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
);