【问题标题】:How do I apply a PorterDuff filter to text color?如何将 PorterDuff 过滤器应用于文本颜色?
【发布时间】:2015-08-24 13:49:14
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: android


    【解决方案1】:

    我花了好几个小时研究文档和论坛,但绝对找不到将 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() 和新的 pressTextColor。

    我很想听听不涉及绘制单像素位图的替代方案,因为这看起来很荒谬——但这确实可以完成工作。

    【讨论】:

    • 不错的解决方案:)。
    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2018-12-29
    • 2011-12-29
    • 1970-01-01
    相关资源
    最近更新 更多