Java/Android String to Color conversion

后端 未结 4 1291
长发绾君心
长发绾君心 2021-02-15 02:12

I\'m making an app and I\'d like to be able to set various colors via user input(edittext) and hex values e.g. #eeeeee and so on. Problem is I cannot seem to figure out how to c

相关标签:
4条回答
  • 2021-02-15 02:36

    http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String, int)

    For example:

    titlebar.setBackgroundColor(Integer.parseInt("545455", 16)+0xFF000000);
    
    0 讨论(0)
  • 2021-02-15 02:41

    here is my function to get colors from ANY string. Eg: "Hello World!" will return you some green color of 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);
    }
    

    Note: The function does not return the same number(color) each time if your string includes special characters, spaces or numbers. There is some salt there - I asigned random numbers to those characters, just for fun...

    0 讨论(0)
  • 2021-02-15 02:43

    What about titlebar.setBackgroundColor(Color.parseColor("#545455"));

    0 讨论(0)
  • 2021-02-15 02:53
    StringBuffer hexString = new StringBuffer();
    hexString.append(Integer.toHexString(0xFF);
    System.out.print(hexString.toString());
    
    0 讨论(0)
提交回复
热议问题