から生成された整数があります android.graphics.Color
整数の値は-16776961です
この値を#RRGGBB形式の16進文字列に変換するにはどうすればよいですか。
簡単に言うと、-16776961から#0000FFを出力したい
注:出力にアルファを含めたくないので、この例も試しましたが成功しませんでした
から生成された整数があります android.graphics.Color
整数の値は-16776961です
この値を#RRGGBB形式の16進文字列に変換するにはどうすればよいですか。
簡単に言うと、-16776961から#0000FFを出力したい
注:出力にアルファを含めたくないので、この例も試しましたが成功しませんでした
回答:
マスクはRRGGBBのみを取得することを確認し、%06Xはゼロが埋め込まれた16進数(常に6文字)を提供します。
String hexColor = String.format("#%06X", (0xFFFFFF & intColor));
Integer.toHexString()を試してください
0x000000FF
、または0xFF0000FF
アルファを削除した場合は機能しません。
私は答えを見つけたと思います、このコードは整数を16進文字列に変換し、アルファを削除します。
Integer intColor = -16895234;
String hexColor = "#" + Integer.toHexString(intColor).substring(2);
このコードは、アルファを削除しても影響がないことが確実な場合にのみ使用してください。
0x00FFFFFF
すると、クラッシュしColor.parseColor
ます。
これが私がやったことです
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"(欠落ビット)では機能しません。
String.format("#%08X", intColor)
このメソッド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());
}
を使用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