android 以编程方式使颜色更透明

83qze16e  于 2023-02-14  发布在  Android
关注(0)|答案(8)|浏览(163)

我正在开发一个简单的条形图应用程序,它使用一个静态的颜色数组来划分条形图的颜色。我希望这个功能可以正常地绘制条形图,或者稍微透明一些。
有没有一种方法可以通过编程来调整一个颜色整数,使其稍微透明一些?或者我必须静态地定义每种颜色的透明版本,然后在需要透明时切换到使用这些版本?

mpgws1up

mpgws1up1#

如果使用支持库,则可以用途:

ColorUtils.setAlphaComponent(int color, int alpha);

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

int res = (color & 0x00ffffff) | (alpha << 24);
mzsu5hc0

mzsu5hc02#

当然......看看颜色,它有一个函数:

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

返回alpha、红、绿色、蓝分量的color-int。
所以你的RGB值可以是静态的,你只需要增加alpha值就可以得到一个新的透明版本的颜色。

zdwk9cvp

zdwk9cvp3#

您好,您可以使用:
android.support.v4.graphics.ColorUtils#setAlphaComponent
注意:这里的α是从0到255,而不是基于%。
也有其他实用的方法,如合同和光度计算在那里。
问候

o4hqfura

o4hqfura4#

尝试以下代码

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

如果颜色编码具有α,则

int alpha= (color >> 24) & 0xFF;
a0x5cqrl

a0x5cqrl5#

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

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之间的任意值。

cs7cruho

cs7cruho6#

我使用扩展函数。

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

也可以使用ColorUtils

ColorUtils.setAlphaComponent(color, alpha)
3pmvbmvn

3pmvbmvn7#

在使用androidx.compose.ui.graphics.Color的排版领域中,可以只使用copy-method:

val slightlyTransparentRed = Color.Red.copy(alpha = 0.9f)
uqjltbpv

uqjltbpv8#

您可以创建一个颜色助手,它返回相同的颜色与应用阿尔法。- * 让我们说,你想改变可见性从0.0到1.0(双)*

val originalColour: Int = primaryColor
 val generatedColor = ColorUtil.generateTransparentColor(originalColour, 0.5)
 view.setBackgroundColor(generatedColor)

创建颜色生成器辅助对象

object ColorUtil {
  fun generateTransparentColor(color: Int, alpha: Double?): Int {
    val defaultAlpha = 255 // (0 - Invisible / 255 - Max visibility)
    val colorAlpha = alpha?.times(defaultAlpha)?.roundToInt() ?: defaultAlpha
    return ColorUtils.setAlphaComponent(color, colorAlpha)
  }
}

相关问题