【问题标题】:Getting value of A in ARGB background color in android programmatically以编程方式在android中以ARGB背景颜色获取A的值
【发布时间】:2016-05-12 06:06:44
【问题描述】:

假设我在 android 中将背景颜色设置为 #AF000000(AARRGGBB)。 我想要十进制 (0-255) 的 alpha 通道 (AA) 的值,这将是 175。

如何以编程方式完成?

【问题讨论】:

  • 你可以转换 hex2decimal

标签: android alpha argb


【解决方案1】:

这是一个纯 Java 解决方案,不使用 Android 特定的getAlpha() 方法。

您是否将此值存储在String 或int 中?如果你在 String 中有它,首先去掉 # 字符,然后将其转换为 int:

String hexString = "#05000000";
int color = Integer.parseInt(hexString.replaceAll("#", ""), 16);

然后我们需要进行一些位操作。这种十六进制颜色表示意味着(在 ARGB 模式下)您拥有值 #AARRGGBB。每个通道有 2 个字节,包括 alpha 通道。为了只获取 alpha 通道(十六进制值的 AA 部分),我们需要“将其向右推 6 个字节”(Java 是 Big Endian 语言)以便我们可以结束加上#000000AA 之类的东西。由于每个字节由 8 位组成,我们必须“推” alpha 值 6 * 8 = 24 bits “向右”:

int alpha = color >> 24;

此过程称为Bit Shifting。所有最右边的 RGB 值都被丢弃,然后我们将 alpha 值存储在 int 中,其十进制值介于 0 和 255 之间。

编辑:如果您已经拥有从 getAlpha() 返回的 alpha 值,您可以随时将其乘以 255 并取底:

int alpha = Math.floor(myView.getAlpha() * 255);

【讨论】:

  • 我同意这个想法。但只需将十进制值转换为最接近的对应整数,其中 0 为 0,1 为 255。然后转换为十六进制。这可以防止您过多地使用 String。
  • 所提供的信息是否回答了您的问题?如果是这样,请将其标记为已接受。如果没有,请在 cmets 中告诉我们原因,以便我们进一步为您提供帮助。
【解决方案2】:

您可以将您的十六进制转换为十进制只需使用,

int i= Integer.parseInt(HEX_STR,16);

或者如果您需要传递长十六进制值意味着使用like,

public static long hexToLong(String hex) {
return Long.parseLong(hex, 16);
}

【讨论】:

  • 你说过“这里的 HEX_STR 是你的 HEX 中的 getAlpha()。”但是 getAlpha() 返回的值在 0 和 1 之间?
【解决方案3】:

获取每个单独的 int 值:

            int argb = Color.parseColor("#00112233");
            int alpha = 0xFF & (argb >> 24);
            int red = 0xFF & (argb >> 16);
            int green = 0xFF & (argb >> 8);
            int blue = 0xFF & (argb >> 0);

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 2021-10-18
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多