You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Compose中实现ColorTrackText类型文本效果是否可行

Compose实现ColorTrackText效果方案

在Jetpack Compose中完全可以实现你需要的分段着色文本效果,这类效果常应用于歌词滚动、进度同步高亮等场景,核心实现逻辑如下:

实现原理

  • 通过Compose的自定义绘制能力对同一段文本执行两次绘制,分别对应默认色和高亮色
  • 用进度参数控制高亮色文本的裁剪范围,最终呈现出部分文本变色的效果
  • 可自定义着色方向、颜色渐变等扩展能力,适配不同业务需求

核心实现代码示例

@Composable
fun ColorTrackText(
    text: String,
    modifier: Modifier = Modifier,
    progress: Float = 0f,
    defaultColor: Color = Color.Gray,
    trackColor: Color = Color.Red,
    style: TextStyle = LocalTextStyle.current
) {
    val textLayoutResult = remember { mutableStateOf<TextLayoutResult?>(null) }
    Text(
        text = text,
        color = defaultColor,
        style = style,
        modifier = modifier.drawWithContent {
            // 绘制全量默认色文本
            drawContent()
            textLayoutResult.value?.let { layoutResult ->
                val trackWidth = layoutResult.size.width * progress.coerceIn(0f, 1f)
                // 裁剪高亮区域绘制高亮色文本
                clipRect(right = trackWidth) {
                    drawText(
                        textLayoutResult = layoutResult,
                        color = trackColor
                    )
                }
            }
        },
        onTextLayout = {
            textLayoutResult.value = it
        }
    )
}

使用示例

@Composable
fun UsageDemo() {
    // progress可随业务逻辑动态更新,比如播放进度、下载进度
    var progress by remember { mutableStateOf(0.6f) }
    ColorTrackText(
        text = "示例文本:这是一段测试ColorTrack效果的内容",
        progress = progress,
        style = TextStyle(fontSize = 22.sp, fontWeight = FontWeight.Medium)
    )
}

效果展示

ColorTrackText效果示例图

内容的提问来源于stack exchange,提问作者Fenger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:09:02