📌  相关文章
📜  改变drawable android studio的颜色 (1)

📅  最后修改于: 2023-12-03 15:39:53.376000             🧑  作者: Mango

改变Drawable的颜色

在Android开发中,我们经常需要在布局中使用Drawable作为背景或者图标等。但是有时候我们需要将Drawable的颜色改变来适应不同的需求,本文将介绍如何改变Drawable的颜色。

方法一:使用Tint

通过设置一个Tint color,可以改变Drawable的颜色。下面是一个示例:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/my_drawable"
    app:tint="@color/my_color"/>

在这个示例中,my_drawable是一个Drawable资源,my_color是一个颜色资源。app:tint属性用于设置Tint color。在运行时,my_drawable的颜色将被改变为my_color的颜色。

也可以在Java代码中设置Tint color,例如:

Drawable drawable = ContextCompat.getDrawable(context, R.drawable.my_drawable);
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, ContextCompat.getColor(context, R.color.my_color));
imageView.setImageDrawable(drawable);

在这个示例中,通过ContextCompat.getDrawable()方法获取Drawable资源,然后使用DrawableCompat.wrap()方法转换成支持tint的Drawable。最后使用DrawableCompat.setTint()方法设置Tint color。

方法二:使用ColorFilter

使用ColorFilter也可以改变Drawable的颜色。下面是一个示例:

Drawable drawable = ContextCompat.getDrawable(context, R.drawable.my_drawable);
drawable.setColorFilter(ContextCompat.getColor(context, R.color.my_color), PorterDuff.Mode.SRC_IN);
imageView.setImageDrawable(drawable);

在这个示例中,通过ContextCompat.getDrawable()方法获取Drawable资源,然后使用Drawable.setColorFilter()方法设置ColorFilter。PorterDuff.Mode.SRC_IN参数表示使用SRC_IN模式,该模式将会保留Drawable的原始颜色,并使用指定的颜色作为遮罩来“涂色”。最后将Drawable设置给ImageView。

方法三:使用DrawableCompat

使用DrawableCompat也可以改变Drawable的颜色。下面是一个示例:

Drawable drawable = ContextCompat.getDrawable(context, R.drawable.my_drawable);
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, ContextCompat.getColor(context, R.color.my_color));
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);
imageView.setImageDrawable(drawable);

在这个示例中,通过ContextCompat.getDrawable()方法获取Drawable资源,然后使用DrawableCompat.wrap()方法转换成支持tint的Drawable。最后使用DrawableCompat.setTint()方法设置Tint color,使用DrawableCompat.setTintMode()方法设置Tint mode。最后将Drawable设置给ImageView。

以上三种方法均可改变Drawable的颜色,开发者可以根据自己的需求选择其中的一种方法。

参考链接: