📅  最后修改于: 2023-12-03 15:39:53.376000             🧑  作者: Mango
在Android开发中,我们经常需要在布局中使用Drawable作为背景或者图标等。但是有时候我们需要将Drawable的颜色改变来适应不同的需求,本文将介绍如何改变Drawable的颜色。
通过设置一个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也可以改变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也可以改变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的颜色,开发者可以根据自己的需求选择其中的一种方法。
参考链接: