我在一个android应用程序上工作,我有一个可绘制的,我正在从源图像加载。在这个图像上,我想将所有的白色像素转换为不同的颜色,比如蓝色,然后缓存生成的Drawable对象,以便以后使用它。

例如,我有一个20x20的PNG文件,中间有一个白色的圆圈,圆圈之外的一切都是透明的。把白色圆圈变成蓝色并缓存结果的最好方法是什么?如果我想使用源图像来创建几个新的Drawables(比如蓝色、红色、绿色、橙色等),答案会改变吗?

我猜我想在某种程度上使用一个ColorMatrix,但我不确定如何。


当前回答

我认为你可以使用Drawable。setColorFilter(0xffff0000,模式。用)。这将把白色像素设置为红色,但我不认为它会影响透明像素。

看到可拉的# setColorFilter

其他回答

根据isWorking字段更改可绘制颜色的简短示例。

我的形状xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@android:color/holo_blue_bright" />
    <corners android:radius="30dp" />
    <size
        android:height="15dp"
        android:width="15dp" />
</shape>

我的改变方法:

private Drawable getColoredDrawable(int drawableResId, boolean isworking) {
    Drawable d = getResources().getDrawable(R.drawable.shape);
    ColorFilter filter = new LightingColorFilter(
            isworking ? Color.GREEN : Color.RED,
            isworking ? Color.GREEN : Color.RED);
    d.setColorFilter(filter);
    return d;
}

用法示例:

text1.setCompoundDrawablesWithIntrinsicBounds(getColoredDrawable(R.drawable.shape, isworking()), null, null, null);

当你使用一个库来为你做这件事时,这是非常非常简单的。 试试这个库

你可以这样调用:

Icon.on(holderView).color(R.color.your_color).icon(R.mipmap.your_icon).put();

测试。这是通过使用toArgb()来实现的

val drawableIcon = ContextCompat.getDrawable(context, R.drawable.ic_brush);
drawableIcon.setTint(Color.Red.toArgb())

我只是遇到了这个问题,并通过替换来解决它:

android:tint="@color/yellow_800"

到以下

app:tint="@color/yellow_800"

我认为你可以使用Drawable。setColorFilter(0xffff0000,模式。用)。这将把白色像素设置为红色,但我不认为它会影响透明像素。

看到可拉的# setColorFilter