如何将 androidx.compose.ui.graphics.Color 转换为 android.graphics.Color(整数)

How to Convert androidx.compose.ui.graphics.Color to android.graphics.Color (int)

如何将 Compose Color 转换为 Android Color Int?

我目前正在使用这段代码,它似乎可以工作,但我似乎无法找到一个函数来获取颜色的 Int 值

Color.rgb(color.red.toInt(), color.green.toInt(), color.blue.toInt())

其中 Color.rgb 是一个函数 android.graphics.Color returns 一个 Integer 颜色和颜色变量只是一个 Compose Color !

因为浮点数要求更高API

已链接:

可以使用toArgb()方法

Converts this color to an ARGB color int. A color int is always in the sRGB color space

类似于:

//Compose Color androidx.compose.ui.graphics
val Teal200 = Color(0xFFBB86FC)

//android.graphics.Color
val color = android.graphics.Color.argb(
    Teal200.toArgb().alpha,
    Teal200.toArgb().red,
    Teal200.toArgb().green,
    Teal200.toArgb().blue
    )

您还可以使用:

val color = Teal200.toAGColor() 

对我有用的是:

color.hashCode()

这是对@gabriele 的回答的转述,其中包含一些 Kotlin 糖分:

//Compose Color androidx.compose.ui.graphics
val Teal200 = Color(0xFFBB86FC)

fun Color.toAGColor() = toArgb().run { android.graphics.Color.argb(alpha, red, green, blue) }

//android.graphics.Color
val color = Teal200.toAGColor() 

Android Compose Color class 现在具有函数 toArgb(),可转换为 Color Int。

函数文档说:

Converts this color to an ARGB color int. A color int is always in the sRGB color space. This implies a color space conversion is applied if needed.

-> 不再需要自定义转换函数。

为我工作转换为 Argb,然后转换为字符串:

fun Int.hexToString() = String.format("#%06X", 0xFFFFFF and this)

fun getStringColor(color: Color): String {
  return color.toArgb().hexToString()
}   

fun someOperation() {
  val color = Color.White //compose color
  val colorAsString = getStringColor(color)
  print(colorAsString)
}


// Result will be: "#FFFFFF"