自动滚动 LazyRow 问题

Autoscrolling LazyRow issue

提问人:Marco 提问时间:11/16/2023 更新时间:11/16/2023 访问量:8

问:

我正在用按钮填充 LazyRow。按钮的 onClick 工作正常,但是当 LazyRow 自动滚动时,它们不再可单击。为什么? 我也尝试使用画布而不是按钮,但是当 LazyRow 开始自动滚动时,可点击停止工作。

在这里,我通过浏览一组数据来填充 LazyRow with Notes。

val lazyListState = rememberLazyListState()
LazyRow(
     horizontalArrangement = Arrangement.Center,
     verticalAlignment = Alignment.Top,
     modifier = Modifier
          .fillMaxSize(),
     state = lazyListState,
) {
     score.forEachIndexed { index, item ->
          items(item.second) {
               Note(noteSize, noteSize / 2 + (noteSize / 2) * item.first, item.first)
          }
     }
  }

然后,我启动一个例程,通过在无限循环中调用挂起函数来移动 LazyRow。

LaunchedEffect(key1 = Unit) {
     while (true) {
          lazyListState.autoScroll()
     }
}

suspend fun ScrollableState.autoScroll(
    animationSpec: AnimationSpec<Float> = tween(durationMillis = 3000, easing = LinearEasing)
) {
    var previousValue = 0f
    scroll(MutatePriority.PreventUserInput) {
        animate(0f, SCROLL_DX, animationSpec = animationSpec) { currentValue, _ ->
            previousValue += scrollBy(currentValue - previousValue)
        }
    }
}

最后,这里是按钮(注释)

@Composable
fun Note(
    noteSize: Dp,
    verticalOffSet: Dp,
) {
    OutlinedButton(
        colors = ButtonDefaults.buttonColors(containerColor = Color.Red),
        onClick = { Log.i("Hi", "Hi!") },
        modifier = Modifier
            .offset(0.dp, verticalOffSet)
            .size(noteSize),
        shape = CircleShape //create a Generic Shape to model the note head
    ) { }
}
onclick android-jetpack 自动滚动 lazycolumn

评论


答: 暂无答案