如何将 android.graphics.Color 转换为 androidx.compose.ui.graphics.Color

How to convert android.graphics.Color to androidx.compose.ui.graphics.Color

我正在绘制 JetpackCompose Canvas

    Canvas(modifier = modifier.clipToBounds()) {
        val colorEvaluator = ArgbEvaluator()
        colorEvaluator.evaluate(t, Color.Red, Color.Blue)
        drawCircle(
            style = Stroke(8.dp.toPx()),
            color = AndroidColor.valueOf(colorEvaluator.evaluate(t, Color.Red, Color.Blue) as Int),
            center = Offset(size.minDimension/2 , size.minDimension/2),
            radius = size.minDimension * t)
        drawRect(
            color = darkColor,
            style = Stroke(16.dp.toPx()),
        )
    }

在哪里

import androidx.compose.ui.graphics.Color
import android.graphics.Color as AndroidColor

我在 color = AndroidColor.valueOf(colorEvaluator.evaluate(t, Color.Red, Color.Blue) as Int), 上收到此错误,错误消息是

Type mismatch.
Required:
androidx.compose.ui.graphics.Color
Found:
android.graphics.Color

看来我应该向 ArgbEvaluator 提供 AndroidColor.REDAndroidColor.BLUE 而不是意外使用 Compose

Color

其中 AndroidColorimport android.graphics.Color as AndroidColor

    Canvas(modifier = modifier.clipToBounds()) {
        drawCircle(
            style = Stroke(8.dp.toPx()),
            color = Color(ArgbEvaluator().evaluate(t, AndroidColor.RED, AndroidColor.BLUE) as Int),
            center = Offset(size.minDimension / 2, size.minDimension / 2),
            radius = size.minDimension * t
        )
        drawRect(
            color = darkColor,
            style = Stroke(16.dp.toPx()),
        )
    }

已更新

找到一个更好的方法,就是按照下面的代码在compose中使用lerp。使用这种方法,我们不再需要使用旧的 ArgbEvaluator.

    Canvas(modifier = modifier.clipToBounds()) {
        drawCircle(
            style = Stroke(8.dp.toPx()),
            color = lerp(Color.Red, Color.Blue, t),
            center = Offset(size.minDimension / 2, size.minDimension / 2),
            radius = size.minDimension * t
        )
        drawRect(
            color = darkColor,
            style = Stroke(16.dp.toPx()),
        )
    }