繁体   English   中英

Android / Java:将任何字符串转换为颜色(十六进制)

[英]Android/Java: Convert any string to color (hex)

有没有办法从Java / Android中的任何String生成颜色,如加密/散列函数?

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

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

谢谢

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

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

String s = "Home";
String color = String.format("#%X", s.hashCode());

具有一致的不透明度:

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

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

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

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

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

我猜你不是要改变资源文件。

诚实地取决于你想要怎么做。 有数百万种方法可以实现它

对我来说,我会取每个字符的Ascii值,将它们全部添加,然后将其转换为十六进制。 使用Said,为了覆盖太多字符的情况,将其修改为十六进制字符串的最大大小。 IE浏览器。 FFFFFF,以便它包裹并重新开始。

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

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

我会将它存储在一个字符串中

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

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

您可以尝试以下方式:

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

同样为所需的所有String生成十六进制,并将它们作为键值对添加到HashMap中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM