37

我正在开发一个简单的条形图应用程序,它使用静态颜色数组来划分条形颜色。我想要正常绘制条形或稍微透明的功能。

有没有办法以编程方式调整颜色整数,使其略微透明?还是我必须静态定义每种颜色的透明版本,然后在需要透明时切换到使用这些版本?

4

6 回答 6

126

如果您正在使用支持库,则可以使用:

ColorUtils.setAlphaComponent(int color, int alpha);

如果您不使用支持库,则从其源代码中获取的单行解决方案是:

int res = (color & 0x00ffffff) | (alpha << 24);
于 2015-06-20T17:53:19.403 回答
15

当然......看看颜色,有一个功能:

static int   argb(int alpha, int red, int green, int blue)

从 alpha、red、green、blue 分量返回一个 color-int。

因此,您的 RGB 值可能是静态的,您只需调整 alpha 值即可获得新的透明版本的颜色。

于 2013-06-21T14:25:21.327 回答
7

您好,您可以使用:

android.support.v4.graphics.ColorUtils#setAlphaComponent

注意:这里的 alpha 是从 0 到 255,而不是基于 %。

还有其他实用方法,例如合同和光度计算。

问候

于 2016-11-15T08:09:42.983 回答
4

试试下面的代码

int color = (int)Long.parseLong(your_color, 16);
int r = (color >> 16) & 0xFF;
int g = (color >> 8) & 0xFF;
int b = (color >> 0) & 0xFF;

如果颜色代码有 alpha 则

int alpha= (color >> 24) & 0xFF;
于 2013-06-21T14:44:39.600 回答
3

从最上面的答案我创建了一个方法来做到这一点:

private Android.Graphics.Color AddTransparencyToColour(Android.Graphics.Color color, int transparancy)
{
    return Android.Graphics.Color.Argb(transparancy, color.R, color.G, color.B);
}

还值得注意的是,这可以更改为像这样的扩展方法

public static ColorExtensions
{
    public static Android.Graphics.Color AddTransparency(this Android.Graphics.Color color, int transparancy)
    {
        return Android.Graphics.Color.Argb(transparancy, color.R, color.G, color.B);
    }
}

关于 alpha 值,来自MSDN Color.FromArgb

评论

要创建不透明颜色,请将 alpha 设置为 255。要创建半透明颜色,请将 alpha 设置为 1 到 254 之间的任何值。

于 2015-11-05T14:41:34.087 回答
0

我使用扩展功能。

fun Int.withAlpha(@IntRange(from = 0, to = 255) alpha: Int): Int {
    return (alpha shl 24) or (this and 0xFFFFFF)
}

也可以用ColorUtils

ColorUtils.setAlphaComponent(color, alpha)
于 2022-02-02T07:28:17.700 回答