Mayank Saini
10/27/2020, 8:36 AMMarquee
. Is this correct?
@Composable
fun MarqueeText(announcement: String, marqueeSpeed: MarqueeSpeed, modifier: Modifier = Modifier) {
val scrollState = rememberScrollState()
val scope = remember { CoroutineScope(SupervisorJob() + Dispatchers.Main.immediate) }
onDispose { scope.cancel() }
ScrollableRow(scrollState = scrollState, modifier = modifier, children = {
Row {
repeat(1000) {
Text(
text = announcement, maxLines = 1
)
}
}
val scrollBy = when (marqueeSpeed) {
MarqueeSpeed.SLOW -> 2f
MarqueeSpeed.MEDIUM -> 6f
MarqueeSpeed.FAST -> 9f
}
scrollState.smoothScrollBy(scrollBy)
scope.launch {
while (true) {
scrollState.smoothScrollBy(scrollBy)
delay(50)
}
}
})
}
Mayank Saini
10/27/2020, 1:38 PMZach Klippenstein (he/him) [MOD]
10/27/2020, 4:26 PMremember { CoroutineScope… }
, use rememberCoroutineScope()
instead.
- In this case, you don’t even need that. Never trigger side effects directly in the composition either, use one of the *Effect
functions. In this case, you could use LaunchedTask
(which will eventually be renamed to LaunchedEffect
).
- There’s a better way to do looping animations, using animated values (see how cursor blinking is implemented).
- I think using ScrollableRow
here means you’ll have to fight the system to make it non-interactive - better to just use a row and “scroll” it by using modifiers only.Zach Klippenstein (he/him) [MOD]
10/27/2020, 4:27 PMZach Klippenstein (he/him) [MOD]
10/27/2020, 4:50 PMZach Klippenstein (he/him) [MOD]
10/27/2020, 5:26 PMZach Klippenstein (he/him) [MOD]
10/27/2020, 5:26 PMZach Klippenstein (he/him) [MOD]
10/27/2020, 5:28 PMZach Klippenstein (he/him) [MOD]
10/27/2020, 5:45 PMMayank Saini
10/28/2020, 10:40 AMZach Klippenstein (he/him) [MOD]
10/28/2020, 1:46 PMZach Klippenstein (he/him) [MOD]
10/28/2020, 1:53 PMval childConstraints = constraints.copy(maxWidth = Constraints.Infinity)
Zach Klippenstein (he/him) [MOD]
10/28/2020, 1:56 PMMayank Saini
10/30/2020, 2:03 AMMarqueeText
in the pipeline as a ready to use feature?Mayank Saini
11/02/2020, 10:51 AMZach Klippenstein (he/him) [MOD]
11/02/2020, 4:56 PMZach Klippenstein (he/him) [MOD]
11/02/2020, 4:58 PM