8

暗号化/ハッシュ関数のようにJava/Androidで任意の文字列から色を生成する方法はありますか?

例: 文字列「Home」は、「#FF1234」のような色を生成します。
文字列「Sky」は「#00CC33」のような色を生成します...

ランダム化なし。そのため、システムは常にその文字列に対して同じ色を計算します

ありがとう

編集:文字列はユーザ​​ーが自由に定義できます

4

5 に答える 5

9

これString.hashCode()は int 値を返すので、それを 16 進値に変換するだけです。

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()));

または、新しいマテリアル デザイン アンドロイド パレットを使用する:
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

リソースファイルを変更しようとしていないと思います。

正直に言うと、あなたがそれをどのようにやりたいかによって異なります。それを達成する方法は何百万もあります

私にとっては、各文字のアスキー値を取得し、それらをすべて加算してから、16 進数に変換します。そうは言っても、文字が多すぎるケースをカバーするには、16 進文字列の最大サイズに変更します。すなわち。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に対して16進数を生成し、それらをキーと値のペアとしてaStringに追加し続けます。HashMap

于 2012-06-08T17:40:54.337 に答える