如何将PorterDuff过滤器应用于文本颜色?

时间:2011-12-07 19:35:38

标签: android

我不想使用状态选择器。我想编写通用代码,将滤镜应用于文本颜色,无论原始颜色是什么。

这实际上是按下时着色按钮的一部分。我了解到我可以轻松地为一个ImageButton着色:

imageButton.setColorFilter(Color.argb(150, 155, 155, 155));

对于按钮,我可以为背景图像着色:

button.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);

但是,我无法弄清楚如何为Button的文本着色颜色值。有任何想法吗?是否有某种方法,所以我可以将PorterDuff色调应用于任意颜色值,所以我可以将新值设置为tet颜色?

1 个答案:

答案 0 :(得分:6)

我花了几个小时研究文档和论坛,并且发现绝对没有直接的方法将PorterDuff过滤器应用于文本或任意(int)颜色值;一切似乎与图像有关。

我的解决方法很难看,但是我找到了唯一的解决方案:

int normalTextColor = Color.argb(0, 155, 155, 155);
Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); //make a 1-pixel Bitmap
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(normalTextColor); //color we want to apply filter to
canvas.drawColor(pressedFilterColor, mode); //apply filter
int pressedTextColor = bitmap.getPixel(0,  0);

Presto - 现在你可以在TextView,Button等上使用setColor()或setTextColor()和新的pressedTextColor。

我很想听到一个不涉及绘制单像素位图的替代方案,因为这似乎相当荒谬 - 但这确实可以完成工作。