Androidで色整数を16進文字列に変換する方法は?


195

から生成された整数があります android.graphics.Color

整数の値は-16776961です

この値を#RRGGBB形式の16進文字列に変換するにはどうすればよいですか。

簡単に言うと、-16776961から#0000FFを出力したい

注:出力にアルファを含めたくないので、この例も試しましたが成功しませんでした


16進数の色を何に設定しようとしていますか?ここに別の答えがあると思います
Blundell

@Blundell Amは、色を外部アプリケーションにエクスポートしています。色は次の形式にする必要があります#RRGGBB
Bosah Chude '30

では、developer.android.com / reference / android / content / res /…の何が問題になってい ますか?URLを貼り付けるか、getColor(int)までスクロールする必要があります
Blundell

生の整数を取得しています。値はリソース
OW

回答:


471

マスクはRRGGBBのみを取得することを確認し、%06Xはゼロが埋め込まれた16進数(常に6文字)を提供します。

String hexColor = String.format("#%06X", (0xFFFFFF & intColor));

3
これは完璧に機能しました、ありがとうございます!Integer.toHexString()で部分文字列を使用するよりも簡単で正確です。
トム

7
私がちょうど私が求めていることを行うColor.parseColor(String hex)メソッドがあることに気づきました。
Marcel Bro 2013年

4
int colorInt = 0xff000000 | Integer.parseInt(hexString、16);
ジョシュ

5
色にアルファを使用している場合は、この回答を使用しないでください。あなたはそれを失うでしょう。
Simon、

5
@Simon、このアルファ準備を行うには、マスクを削除して6を8に変更するだけです。OPがアルファの削除を要求したことに注意してください。
TWiStErRob 2018

54

7
この答えは色のアルファを保持します
Bosah Chude

3
さて、もしあなたがアルファを取り除きたいなら、そのためのビットマスクを作成してください:Integer.toHexString(value&0x00FFFFFF)
ming_codes

3
Javaのint型は4バイト長です。android.graphics.Colorのドキュメントによると、左端のバイトはアルファチャネルです。値0x00FFFFFFでビットごとのAND演算を使用すると、基本的に左端のバイト(アルファチャネル)が0にクリアされます。Integer.toHexStringと共に使用すると、残りの3バイトが文字列に残ります。重要でない数字はすべて呼び出しから削除されるため、先行ゼロが必要な場合は、先頭にゼロを付加する必要がある場合があります。
ming_codes、2011年

1
0x000000FF、または0xFF0000FFアルファを削除した場合は機能しません。
TWiStErRob 2016

26

私は答えを見つけたと思います、このコードは整数を16進文字列に変換し、アルファを削除します。

Integer intColor = -16895234;
String hexColor = "#" + Integer.toHexString(intColor).substring(2);

このコードは、アルファを削除しても影響がないことが確実な場合にのみ使用してください


1
これを送信0x00FFFFFFすると、クラッシュしColor.parseColorます。
TWiStErRob 2016

9

これが私がやったことです

 int color=//your color
 Integer.toHexString(color).toUpperCase();//upercase with alpha
 Integer.toHexString(color).toUpperCase().substring(2);// uppercase without alpha

あなたが答えてくれたみんなありがとう


最初のバリアントは0x00FFFFFF-> "FFFFFF"(アルファなし)では機能しません。2番目のバリアントは0x00000FFF-> "F"(欠落ビット)では機能しません。
TWiStErRob 2016

@TWiStErRobは、アルファチャネルのある色に対して確実に機能するソリューションでしたか?
Saket 2018

2
@Saketトップアンサーのバリアントは次のString.format("#%08X", intColor)
とおりです。– TWiStErRob

@TWiStErRobああ、あなたのコメントはトップの回答の下にありました。ありがとう!
Saket 2018

5

16進文字列へのARGBカラーの整数値:

String hex = Integer.toHexString(color); // example for green color FF00FF00

16進文字列からARGBカラーの整数値:

int color = (Integer.parseInt( hex.substring( 0,2 ), 16) << 24) + Integer.parseInt( hex.substring( 2 ), 16);

4

このメソッドInteger.toHexStringを使用すると、Color.parseColorを使用するときに、一部の色に対して不明な色の例外が発生する可能性があります。

そして、このメソッドでString.format( "#%06X"、(0xFFFFFF&intColor))、アルファ値が失われます。

だから私はこの方法をお勧めします:

public static String ColorToHex(int color) {
        int alpha = android.graphics.Color.alpha(color);
        int blue = android.graphics.Color.blue(color);
        int green = android.graphics.Color.green(color);
        int red = android.graphics.Color.red(color);

        String alphaHex = To00Hex(alpha);
        String blueHex = To00Hex(blue);
        String greenHex = To00Hex(green);
        String redHex = To00Hex(red);

        // hexBinary value: aabbggrr
        StringBuilder str = new StringBuilder("#");
        str.append(alphaHex);
        str.append(blueHex);
        str.append(greenHex);
        str.append(redHex );

        return str.toString();
    }

    private static String To00Hex(int value) {
        String hex = "00".concat(Integer.toHexString(value));
        return hex.substring(hex.length()-2, hex.length());
    }

0
String int2string = Integer.toHexString(INTEGERColor); //to ARGB
String HtmlColor = "#"+ int2string.substring(int2string.length() - 6, int2string.length()); // a stupid way to append your color

0

を使用Integer.toHexStringすると、のような色を変換するときに、ゼロが失われることになります0xFF000123。これは、Android固有のクラスもJavaも必要としない、kotlinベースのソリューションです。したがって、マルチプラットフォームプロジェクトでも使用できます。

    fun Int.toRgbString(): String =
        "#${red.toStringComponent()}${green.toStringComponent()}${blue.toStringComponent()}".toUpperCase()

    fun Int.toArgbString(): String =
        "#${alpha.toStringComponent()}${red.toStringComponent()}${green.toStringComponent()}${blue.toStringComponent()}".toUpperCase()

    private fun Int.toStringComponent(): String =
        this.toString(16).let { if (it.length == 1) "0${it}" else it }

    inline val Int.alpha: Int
        get() = (this shr 24) and 0xFF

    inline val Int.red: Int
        get() = (this shr 16) and 0xFF

    inline val Int.green: Int
        get() = (this shr 8) and 0xFF

    inline val Int.blue: Int
        get() = this and 0xFF
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.