我正在开发一个简单的条形图应用程序,它使用静态颜色数组来划分条形颜色。我想要正常绘制条形或稍微透明的功能。
有没有办法以编程方式调整颜色整数,使其略微透明?还是我必须静态定义每种颜色的透明版本,然后在需要透明时切换到使用这些版本?
我正在开发一个简单的条形图应用程序,它使用静态颜色数组来划分条形颜色。我想要正常绘制条形或稍微透明的功能。
有没有办法以编程方式调整颜色整数,使其略微透明?还是我必须静态定义每种颜色的透明版本,然后在需要透明时切换到使用这些版本?
如果您正在使用支持库,则可以使用:
ColorUtils.setAlphaComponent(int color, int alpha);
如果您不使用支持库,则从其源代码中获取的单行解决方案是:
int res = (color & 0x00ffffff) | (alpha << 24);
当然......看看颜色,有一个功能:
static int argb(int alpha, int red, int green, int blue)
从 alpha、red、green、blue 分量返回一个 color-int。
因此,您的 RGB 值可能是静态的,您只需调整 alpha 值即可获得新的透明版本的颜色。
您好,您可以使用:
android.support.v4.graphics.ColorUtils#setAlphaComponent
注意:这里的 alpha 是从 0 到 255,而不是基于 %。
还有其他实用方法,例如合同和光度计算。
问候
试试下面的代码
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;
从最上面的答案我创建了一个方法来做到这一点:
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 之间的任何值。
我使用扩展功能。
fun Int.withAlpha(@IntRange(from = 0, to = 255) alpha: Int): Int {
return (alpha shl 24) or (this and 0xFFFFFF)
}
也可以用ColorUtils
ColorUtils.setAlphaComponent(color, alpha)