8

有什么方法可以从 Java / Android 中的任何字符串生成颜色,比如加密 / 哈希函数?

示例:字符串“Home”生成类似于“#FF1234”的颜色。
字符串 "Sky" 生成类似 "#00CC33" 的颜色 ...

没有随机化。因此,系统将始终为该字符串计算相同的颜色

谢谢

编辑:字符串由用户自由定义

4

5 回答 5

9

String.hashCode()返回一个 int 值,因此只需将其转换为十六进制值即可。

String s = "Home";
String color = String.format("#%X", s.hashCode());
于 2012-06-08T17:46:02.433 回答
5

具有一致的不透明度:

String opacity = "#99"; //opacity between 00-ff
String hexColor = String.format(
        opacity + "%06X", (0xFFFFFF & anyString.hashCode()));

或者使用新的材料设计android Palette:
https ://gist.github.com/odedhb/79d9ea471c10c040245e

于 2014-04-01T19:15:19.070 回答
3

尝试在此处查找如何创建字符串的消息摘要。

http://www.mkyong.com/java/java-sha-hashing-example/

创建消息摘要后,使用生成的每个字节数来创建颜色值。您可以在中间的任何地方使用最不重要的、最重要的。

于 2012-06-08T18:00:41.067 回答
1

我猜您并没有尝试更改资源文件。

老实说,这取决于你想怎么做。有数百万种方法可以实现它

对我来说,我会取每个字符的 Ascii 值,将它们全部加起来,然后将其转换为十六进制。话虽如此,为了涵盖太多字符的情况,会将其修改为十六进制字符串的最大大小。IE。FFFFFF 这样它就会环绕并重新开始。

//pseudocode
counter = 0;
foreach(char in string){
    counter+=(int)char;

}
counter = convertToHex(counter)%0xffffff;
string x = "#"+counter.toString();

之后我将它存储到一个字符串中

string x = "#"+hexVal.toString();

他们你可以用它做你想做的事。

于 2012-06-08T17:35:58.613 回答
0

您可以尝试以下方法:

String s = "Home";
byte[] b = s.getBytes("US-ASCII");
StringBuffer hexString = new StringBuffer();
for (int i=0;i<b.length;i++) {
    hexString.append(Integer.toHexString(0xFF & b[i]));
    }
String finalHex = "#" + hexString.substring(0,6);
System.out.println(finalHex);

生成一个十六进制:#486f6d

同样,为您想要的所有 s 生成十六进制String并继续将它们添加到 aHashMap作为键值对。

于 2012-06-08T17:40:54.337 回答