我正在开发一个Android应用程序,我有一个可绘制的,我正在从源图像加载 . 在这个图像上,我想将所有白色像素转换为不同的颜色,比如蓝色,然后缓存生成的Drawable对象,以便稍后使用 .
例如,假设我有一个20x20的PNG文件,中间有一个白色圆圈,圆圈外的所有内容都是透明的 . 将白色圆圈变为蓝色并缓存结果的最佳方法是什么?如果我想使用该源图像创建几个新的Drawables(比如蓝色,红色,绿色,橙色等),答案是否会改变?
我猜我想以某种方式使用ColorMatrix,但我不确定如何 .
18 回答
我想你实际上只能使用
Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )
. 这会将白色像素设置为红色,但我认为它不会影响透明像素 .见Drawable#setColorFilter
尝试使用此代码:
我知道这个问题在Lollipop之前就已经问过了,但是我想在Android 5上添加一个很好的方法 . 你创建了一个xml drawable,它引用了原始的并绘制了tint,就像这样:
Check out my blog post on this for more information .
如果您有一个纯色的drawable,并且您想将其更改为不同的纯色,则可以使用
ColorMatrixColorFilter
. 透明度得以保留 .新的支持v4为api 4带来了色彩 .
你可以这样做
您应该为所有API执行此操作:
我还使用
ImageView
作为图标(在ListView
或设置屏幕中) . 但我认为有更简单的方法可以做到这一点 .使用
tint
更改所选图标的颜色叠加层 .在xml中,
工作正常,因为它来自
AppCompat
我能够使用以下代码执行此操作,该代码取自一个活动(布局非常简单,只包含一个ImageView,并且不在此处发布) .
在您的活动中,您可以使用单一颜色为PNG图像资源着色:
现在当你使用R.drawable . *时,它应该用所需的色调着色 . 如果你需要额外的颜色,那么你应该能够.mutate()绘制 .
You can solve it using Android support compat libraries. :)
看看这个示例代码“ColorMatrixSample.java”
相关API可用here:
有这么多的解决方案,但没有人建议如果 color resource xml 文件已经有颜色,那么我们可以直接从那里选择如下:
这适用于所有背景:
Textview,Button ......
感谢@sabadow
这段代码对我有用:
根据
isWorking
字段更改可绘制颜色的简短示例 .我的形状xml:
我要改变的方法:
用法示例:
当您使用库为您执行此操作时,这非常非常简单 . 试试这个library
你可以这样打电话:
如果您将可绘制作为源包含在ImageView中,则可以使用1个衬垫: