捕捉到索引 Lazyrow

Snap to an index Lazyrow

我正在使用 lazyRow 制作日历。我现在遇到的问题是,我希望行在一定的滚动量后捕捉到索引,这样它就不可能卡在索引之间。有办法吗?

    LazyRow(state = calendarViewModel.listState, modifier = Modifier.fillMaxWidth()) {
        calendarYears.forEach {
            items(it.months.count()) { index ->
                calendarViewModel.onEvent(CalendarEvent.ClickedMenuItem(index))
                CalendarRowItem(
                    modifier = Modifier.fillParentMaxWidth(),
                    calendarSize = it.months[index].amountOfDays,
                    initWeekday = it.months[index].startDayOfMonth.ordinal,
                    textColor = MaterialTheme.colors.secondaryVariant,
                    clickedColor = MaterialTheme.colors.primary,
                    textStyle = MaterialTheme.typography.body1
                )
            }
        }
    }

您可以使用 accompanist library 中的 HorizontalPager,它提供了这种投掷行为 out-of-the-box,它在内部使用 LazyRow

另一种选择是使用 Snapper library created by @chris-banes

在你的 build.gradle.

添加依赖
dependencies {
    implementation "dev.chrisbanes.snapper:snapper:<version>"
}

并在您的 LazyRow 中使用它。

val lazyListState = rememberLazyListState()

LazyRow(
    state = lazyListState,
    flingBehavior = rememberSnapperFlingBehavior(lazyListState),
) {
    // content
}

结果: