将 argb 数组传递给 int 或 long
Passing argb array to int or long
我有一个方法可以为我提供一个数组,其中包含我需要绘制成 canvas 渐变的颜色的 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);
有人能看出我做错了什么吗?我在任何地方都找不到问题
对不起我的英语
更正 Java 中的十六进制数以“0x”开头,而不是“#”。您的号码应为“0x64FF0000”,格式应为“0x%02x%02x%02x%02x”。您还可以使用公式创建一个 int:
int color = (a<<24) | (r<<16) | (g<<8) | b
这个方法应该也有效:
Color.argb(a,r,g,b)
如果您希望它可以解析为长格式,请从您的十六进制字符串中删除#:IE
String hex = String.format("%02x%02x%02x%02x", a, r, g, b);
您似乎想使用 Color
中的此方法:
public static int parseColor (String colorString)
我认为它会完全满足您的要求。
它可以处理具有您现在使用的格式的字符串,但也可以使用颜色名称。
我有一个方法可以为我提供一个数组,其中包含我需要绘制成 canvas 渐变的颜色的 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);
有人能看出我做错了什么吗?我在任何地方都找不到问题 对不起我的英语
更正 Java 中的十六进制数以“0x”开头,而不是“#”。您的号码应为“0x64FF0000”,格式应为“0x%02x%02x%02x%02x”。您还可以使用公式创建一个 int:
int color = (a<<24) | (r<<16) | (g<<8) | b
这个方法应该也有效:
Color.argb(a,r,g,b)
如果您希望它可以解析为长格式,请从您的十六进制字符串中删除#:IE
String hex = String.format("%02x%02x%02x%02x", a, r, g, b);
您似乎想使用 Color
中的此方法:
public static int parseColor (String colorString)
我认为它会完全满足您的要求。
它可以处理具有您现在使用的格式的字符串,但也可以使用颜色名称。