這裏是我的函數從任何字符串得到的顏色。 例如:「Hello World!」將返回R G B的一些綠色:84 181 132
public static int getColorFromString(String string) {
int[] RGB = {0,0,0};
int l = string.length();
String sub_string_0 = string.substring(0, (int) Math.ceil((double) l/3)); // responsable for Red
int l_0 = sub_string_0.length();
String sub_string_1 = string.substring(l_0, l_0 + (int) Math.ceil((double) (l - l_0)/2)); // responsable for Green
String sub_string_2 = string.substring(l_0 + sub_string_1.length(), string.length()); // responsable for Blue
String[] sub_string = new String[]{
sub_string_0,
sub_string_1,
sub_string_2
};
for(int i = 0; i < sub_string.length; i++) {
if(sub_string[i].length()==0)
sub_string[i] = " "; // we asign a value (a space)
Log.d("sub_string", i + " " + sub_string[i]);
for (char c : sub_string[i].toCharArray()) {
int c_val = Character.getNumericValue(c) - Character.getNumericValue('a'); // for 'a' -> 0 for 'z' -> 25
if(c_val < 0) // spaces, numbers ...
c_val= new Random().nextInt(25); //add some salt - a random number
Log.d("value ", c + " -> " + c_val);
RGB[i] = RGB[i] + c_val;
}
}
int letters_number = Character.getNumericValue('z') - Character.getNumericValue('a'); // z - a 35 - 10
// normalizing
int R = 255 * RGB[0]/sub_string[0].length()/letters_number;
int G = 255 * RGB[1]/sub_string[1].length()/letters_number;
int B = 255 * RGB[2]/sub_string[2].length()/letters_number;
Log.d("R G B", R +" " + G + " " + B);
return Color.rgb(R, G, B);
}
注: 函數不返回相同數量(顏色)每個如果字符串包含特殊字符,空格或數字的時間。這裏有一些鹽 - 我爲這些字符賦予了隨機數字,只是爲了好玩...
[將運行時的android顏色字符串轉換爲int]可能的重複(http://stackoverflow.com/questions/3849607/converting -android-color-string-in-runtime-into-int) – 2016-02-25 05:49:53