Home > OS >  How to convert android color to compose color
How to convert android color to compose color

Time:09-16

I want to convert Android color to Compose color. But I don't know how.

I used these code but these codes have Error and my App crashes.

val currColor = task.startDate.time.toColor()
var test = lerp(Color.Red,Color.Blue,265f)

And

var test = Color(ArgbEvaluator().evaluate(20f,Color.Red,Color.Blue) as Int)

I checked that link too. How to convert android.graphics.Color to androidx.compose.ui.graphics.Color

So how can I convert android.graphics.color to androidx.compose.ui.graphics.color ?

CodePudding user response:

val graphicsColor = android.graphics.Color.RED
val composeColor = androidx.compose.ui.graphics.Color(graphicsColor)

CodePudding user response:

You can convert it with

val int = android.graphics.Color.RED
val color = Color(int)

but you neither need conversion nor ArgbEvaluator().evaluate() to changer color based on fraction.

Compose has lerp function that takes two Compose Colors and fraction to change color based on fraction which is between 0f and 1f

lerp(Color.Red,Color.Blue,265f)

should be between 0f and 1f

/**
 * Linear interpolate between two [Colors][Color], [start] and [stop] with [fraction] fraction
 * between the two. The [ColorSpace] of the result is always the [ColorSpace][Color.colorSpace]
 * of [stop]. [fraction] should be between 0 and 1, inclusive. Interpolation is done
 * in the [ColorSpaces.Oklab] color space.
 */
@Stable
fun lerp(start: Color, stop: Color, /*@FloatRange(from = 0.0, to = 1.0)*/ fraction: Float): Color {
    val colorSpace = ColorSpaces.Oklab
    val startColor = start.convert(colorSpace)
    val endColor = stop.convert(colorSpace)

    val startAlpha = startColor.alpha
    val startL = startColor.red
    val startA = startColor.green
    val startB = startColor.blue

    val endAlpha = endColor.alpha
    val endL = endColor.red
    val endA = endColor.green
    val endB = endColor.blue

    val interpolated = Color(
        alpha = lerp(startAlpha, endAlpha, fraction),
        red = lerp(startL, endL, fraction),
        green = lerp(startA, endA, fraction),
        blue = lerp(startB, endB, fraction),
        colorSpace = colorSpace
    )
    return interpolated.convert(stop.colorSpace)
}
  • Related