AndroidJetpackCompose(可组合)如何流畅地更改主题颜色?
创始人
2024-10-08 11:36:20
0

可以通过以下代码示例实现:

  1. 首先,定义不同的主题颜色,例如:
val YellowTheme = MaterialTheme.colors.copy(
    primary = Color.Yellow,
    secondary = Color.Gray,
)

val IndigoTheme = MaterialTheme.colors.copy(
    primary = Color.Indigo,
    secondary = Color.Gray,
)
  1. 创建一个MutableState变量,用于存储当前选择的主题颜色,例如:
val currentColor = remember { mutableStateOf(Color.Yellow) }
  1. 在需要更改主题颜色的地方,使用LaunchedEffect实现颜色平滑过渡的效果,例如:
LaunchedEffect(currentColor.value) {
    val targetColor = if (currentColor.value == YellowTheme.primary) IndigoTheme.primary else YellowTheme.primary
    animateColorTransition(targetColor)
}

fun animateColorTransition(targetColor: Color) {
    val transition = ColorTransition(currentColor.value, targetColor)
    for (color in transition) {
        currentColor.value = color
        delay(10)
    }
}

class ColorTransition(startColor: Color, endColor: Color) : Sequence {
    private val fromRed = startColor.red
    private val fromGreen = startColor.green
    private val fromBlue = startColor.blue
    private val toRed = endColor.red
    private val toGreen = endColor.green
    private val toBlue = endColor.blue

    override fun iterator(): Iterator = (0..100).iterator().map { fraction ->
        Color(
            lerp(fromRed, toRed, fraction / 100f),
            lerp(fromGreen, toGreen, fraction / 100f),
            lerp(fromBlue, toBlue, fraction / 100f),
        )
    }

    private fun lerp(startValue: Int, endValue: Int, fraction: Float): Int =
        (startValue + (fraction * (endValue - startValue))).roundToInt()
}
  1. 使用MaterialThemecurrentColor变量为组件设置

相关内容

热门资讯

透视辅助!佛手大菠萝有挂吗,w... 透视辅助!佛手大菠萝有挂吗,wpk辅助器,妙计教程(原来真的是有挂)-哔哩哔哩1.佛手大菠萝有挂吗 ...
透视测试!wepoker怎么买... 透视测试!wepoker怎么买辅助(透视)开挂辅助攻略(竟然是有挂)-哔哩哔哩1、让任何用户在无需w...
日前!德普软件,微乐贵阳捉鸡麻... 日前!德普软件,微乐贵阳捉鸡麻将挂软件,切实是真的挂(关于揭秘教程)-哔哩哔哩1、微乐贵阳捉鸡麻将挂...
透视辅助!破解辅助插件wepo... 透视辅助!破解辅助插件wepoker,来玩app破解,资料教程(总是存在有挂)-哔哩哔哩在进入破解辅...
透视苹果版!wepoker辅助... 透视苹果版!wepoker辅助透视软件(透视)开挂辅助脚本(切实真的有挂)-哔哩哔哩1、进入到wep...
今年以来!wepoker轻量版... 今年以来!wepoker轻量版透视系统,水鱼天下破解版微信,本来是真的挂(关于德州教程)-哔哩哔哩1...
透视有挂!德普之星透视辅助软件... 透视有挂!德普之星透视辅助软件下载,wepoker怎么提高运气,手段教程(果然真的是有挂)-哔哩哔哩...
透视网页版!哈糖大菠萝怎么挂(... 透视网页版!哈糖大菠萝怎么挂(透视)开挂辅助器(一直真的是有挂)-哔哩哔哩1、起透看视 哈糖大菠萝怎...
记者获悉!wepoker怎么破... 记者获悉!wepoker怎么破解游戏,边锋老友荣成辅助,一贯有挂(详情总结教程)-哔哩哔哩1、边锋老...
透视存在!德州透视是真的假的(... 透视存在!德州透视是真的假的(透视)开挂辅助方法(原来是真的挂)-哔哩哔哩透视存在!德州透视是真的假...