将argb数组传递给int或long

时间:2015-06-11 14:06:09

标签: java android colors integer hex

我有一个方法可以为我提供一个数组,其中包含我需要绘制到画布渐变中的颜色的ARGB部分。但据我所知,这个渐变只接受代表颜色的十六进制数。所以我根据我在这里找到的信息做了一个功能。

这是功能:

public static long getIntegerHexFromARGB(int a, int r, int g, int b){
    String hex = String.format("#%02x%02x%02x%02x", a, r, g, b);
    return Long.parseLong(hex,16);
}

这就是我所说的:

long rgba_outter_circle = FormulaHelpers.getIntegerHexFromARGB(argbCircleColor[0], argbCircleColor[1], argbCircleColor[2], argbCircleColor[3]);

我的问题是,此代码位于自定义视图中,我将其包含在布局中,并且Android Studio布局编辑器声称:

java.lang.NumberFormatException: For input string: "#64FF0000"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:430)
at java.lang.Long.valueOf(Long.java:513)
at math.FormulaHelpers.getIntegerHexFromARGB(FormulaHelpers.java:41)
at framework.joystickController.JoystickButtonView.onMeasure(JoystickButtonView.java:177)
at android.view.View.measure(View.java:17430)
... and much more

它声称的线是FormulaHelpers:41,即:

return Long.parseLong(hex,16);

有人能看出我做错了吗?我无法在任何地方找到问题 对不起我的英文

3 个答案:

答案 0 :(得分:2)

Java中的正确十六进制数字以' 0x'开头,而不是'#'。您的号码应为" 0x64FF0000",格式应为" 0x%02x%02x%02x%02x"。您还可以使用公式创建一个int:

int color = (a<<24) | (r<<16) | (g<<8) | b

此方法也应该有效:

Color.argb(a,r,g,b)

答案 1 :(得分:1)

如果您希望它可以解析为Long格式,请从十六进制字符串中删除#:IE

String hex = String.format("%02x%02x%02x%02x", a, r, g, b);

答案 2 :(得分:1)

您似乎想要使用Color中的此方法:

public static int parseColor (String colorString)

我认为它会完全符合您的要求。

它将使用您现在使用的格式的字符串,但也可以使用颜色名称。