在Android中用另一种颜色替换ShapeDrawable中的单一(黑色)颜色

3
假设我有一个ShapeDrawable在Android中。它不是位图。我想要动态地将其中的单一颜色(描边颜色)替换为另一种颜色。新的期望颜色在设计时未知,不能放入可绘制资源。
例如,从图片1(黑色代表我想要替换的颜色,方格背景是形状轮廓未覆盖的背景)转到图片2,其中红色是我想要的颜色:
我可以使用 alpha mask 创建形状,如果需要,则白色或黑色为透明,或者例如使轮廓变成绿色。最终结果中,白色填充颜色必须保持不变。
是否可以使用标准颜色过滤器ColorMatrixColorFilter或PorterDuffColorFilter实现?如果是,我很难找出具体的过滤器。 我认为自定义ColorFilter不可能。
2个回答

7
在具有黑色边框且需要设置为任意颜色以及白色内部的特定情况下,您可以使用ADD模式中的PorterDuff滤镜。由于它是饱和的,因此不会对白色区域产生任何影响,而由于黑色为零,添加颜色将有效地将所有黑色区域设置为该颜色。
例如,要将其设置为红色:
 drawable.setColorFilter(0x00ff0000, PorterDuff.Mode.ADD);

.setColorFilter(new PorterDuffColorFilter(Color.WHITE, PorterDuff.Mode.ADD)) - CrandellWS
我需要相反的效果,改变白色,保留其他颜色。这个答案有所帮助,但必须尝试每个可能的值,最终找到了:PorterDuff.Mode.MULTIPLY。 - Gavriel

-3

这个教程可能会有所帮助。根据这个教程,您可以用所需的颜色替换图像中的白色部分。

编程方式更改可绘制图标的颜色 http://takeoffandroid.com/uncategorized/changing-color-of-drawable-icon-programmatically/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接