在Java中从RGB字符串创建颜色

3
这是我将字符串转换为颜色的代码:
public Color prepareColour(String str) {
    str.replace("#", "");
    float r = Float.valueOf(str.substring(0,1));
    float g = Float.valueOf(str.substring(2,3));
    float b = Float.valueOf(str.substring(4,5));
    Color color = Color.valueOf(r,g,b);
    return color;

}

我得到了以下的调试错误信息:

错误:(16, 23) 错误: 无法将Color类中的构造函数应用于给定类型; 所需参数:无 找到参数:float,float,float 原因:实际参数和形式参数列表长度不同

然而,Android Studio 编译之前的建议是:

要求调用 API 等级 26 (当前最小等级为17)......

我看到有2011年的答案支持创建颜色的这种方式,所以它一定可以在API 17上工作,并且不需要26。
我尝试了清理和重建项目,以及将 str.substring 替换为实际值,但没有任何改变。
为什么代码不能编译?

你能提供一个你正在解析的字符串的示例吗? - Submersed
淹没了,它无法编译。我已经用“FF”替换了str.substring(),但结果还是一样的。 - Alex Ioja-Yang
我能找到的唯一一个 Color.valueOf(?) 方法是在 JavaFX 中。如果是这样,请使用 Color.valueOf(someHexString),它应该可以正常工作。 - Tom K
@TomK https://developer.android.com/reference/android/graphics/Color.html#valueOf(float,%20float,%20float) - Tom
2个回答

8

您尝试使用Color.rgb(r,g,b)而不是Color.valueOf(...)吗?Color.valueOf(...)是Android开发者O预览版中的新方法,因此目前只在1个API级别上有用。

此外,请确保您使用的整数范围为0-255或浮点数范围为0-1。


不确定为什么,但是我这样做会出现以下错误:Error:(20, 32) error: incompatible types: int cannot be converted to Color。我甚至没有使用任何int... - Alex Ioja-Yang
1
Color.rgb 返回一个整数。整数是一种颜色,Color 类只是一个方便操作颜色的类。 - Submersed
不兼容的类型:需要android.graphics.Color;找到int - Alex Ioja-Yang
让你的方法返回一个int,然后只需返回Color.rgb(...); Color上的所有方法都是静态的,因此您实际上不需要一个Color类型的对象。 您只需要颜色的int表示即可。 - Submersed
所以方法基本上不能返回颜色。当我需要使用颜色时,我必须进行转换,对吗? - Alex Ioja-Yang
是的,方法不会返回颜色,只返回整数。任何接受颜色的API都会期望以整数形式提供,Color类只是用于生成这些整数的辅助工具。 - Submersed

2

这是该问题的最佳解决方案。 - Jesús Barrera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接