[Android TV] テキストのスクロール表示

テキストが表示幅を超えている場合に自動でスクロールして表示する機能の実装

Jetpack Compose 1.4.0でbasicMarqueeが追加されているのですごく簡単に実装できます
Modifierやばいですね

Text("長いテキスト1234567890",
    modifier = Modifier
        .width(80.dp)
        .basicMarquee(
            animationMode = MarqueeAnimationMode.Immediately,
            spacing = MarqueeSpacing(0.dp)
        ),
    maxLines = 1,
)

自分で実装する場合はこんな感じかと
※ループ表示はできませんが…

val state = rememberScrollState(0)

LaunchedEffect(Unit) {
    while (true) {
        val move = 2
        val pos = if (state.value + move > state.maxValue) 0 else state.value + move
        state.scrollTo(pos)
        delay(50)
        yield()
    }
}

Text("長いテキスト1234567890",
    modifier = Modifier
        .width(80.dp)
        .horizontalScroll(state),
    maxLines = 1,
    //overflow = TextOverflow.Visible
)

Android Studio Hedgehog 2023.1.1 RC 3 built on November 3, 2023