1

以下に示すように、3 つの整数値を 16 進数値 (文字列) に変換するメソッドを作成しました (PS: まだテストされていません)。

protected String convertRGBToHex(int r, int g, int b) {

    String rFString, rSString, gFString, gSString, bFString, bSString, result;
    int red, green, blue;
    int rred, rgreen, rblue;

    red = r / 16;
    rred = r % 16;

    if (red == 10) rFString = "A";
    else if (red == 11) rFString = "B";
    else if (red == 12) rFString = "C";
    else if (red == 13) rFString = "D";
    else if (red == 14) rFString = "E";
    else if (red == 15) rFString = "F";
    else rFString = String.valueOf(red);

    if (rred == 10) rSString = "A";
    else if (rred == 11) rSString = "B";
    else if (rred == 12) rSString = "C";
    else if (rred == 13) rSString = "D";
    else if (rred == 14) rSString = "E";
    else if (rred == 15) rSString = "F";
    else rSString = String.valueOf(rred);

    rFString = rFString + rSString;

    green = g / 16;
    rgreen = g % 16;

    if (green == 10) gFString = "A";
    else if (green == 11) gFString = "B";
    else if (green == 12) gFString = "C";
    else if (green == 13) gFString = "D";
    else if (green == 14) gFString = "E";
    else if (green == 15) gFString = "F";
    else gFString = String.valueOf(green);

    if (rgreen == 10) gSString = "A";
    else if (rgreen == 11) gSString = "B";
    else if (rgreen == 12) gSString = "C";
    else if (rgreen == 13) gSString = "D";
    else if (rgreen == 14) gSString = "E";
    else if (rgreen == 15) gSString = "F";
    else gSString = String.valueOf(rgreen);

    gFString = gFString + gSString;

    blue = b / 16;
    rblue = b % 16;

    if (blue == 10) bFString = "A";
    else if (blue == 11) bFString = "B";
    else if (blue == 12) bFString = "C";
    else if (blue == 13) bFString = "D";
    else if (blue == 14) bFString = "E";
    else if (blue == 15) bFString = "F";
    else bFString = String.valueOf(blue);

    if (rblue == 10) bSString = "A";
    else if (rblue == 11) bSString = "B";
    else if (rblue == 12) bSString = "C";
    else if (rblue == 13) bSString = "D";
    else if (rblue == 14) bSString = "E";
    else if (rblue == 15) bSString = "F";
    else bSString = String.valueOf(rblue);

    bFString = bFString + bSString;

    result = "#" + rFString + gFString + bFString;

    return result;

}

私の質問は: この文字列の結果を int 値に変換できる方法はありますか?

view.setBackgroundColor(0xF82619);

または、文字列を int に変換してから (クラッシュせずに) 変換する方法はありますか?

view.setBackgroundColor(result);

ありがとう!

4

3 に答える 3

5

あなたができる整数を取得するには

int col = (0xff << 24) | ((r&0xff) << 16) | ((g&0xff) << 8) | (b&0xff);

さらに簡単な方法は次のとおりです。

int col = Color.rgb(r, g, b);
于 2013-08-20T17:56:13.220 に答える
3

文字列が

String col = "0xF82619";

試す:

view.setBackgroundColor(Color.parseColor(col));
于 2013-08-20T17:53:43.247 に答える
2

最初の文字列に変換してから16進数に変換する代わりに、直接16進数に変換します

  Integer.valueOf(String.valueOf(n), 16);

コードのパフォーマンスが向上します。

于 2013-08-20T17:55:29.437 に答える