Box(
modifier = Modifier.size(100.dp),
contentAlignment = Alignment.Center
) {
val pagerState = rememberPagerState()
val items = listOf("A", "B", "C")
androidx.compose.foundation.pager.HorizontalPager(
state = pagerState,
pageCount = items.size,
modifier = Modifier,
verticalAlignment = Alignment.CenterVertically
) { page ->
Text(
text = items[page],
modifier = Modifier
)
}
}
在上面的代码中,寻呼机在到达最后一项后停止滚动。但是,我希望寻呼机在到达最后一项后继续无限滚动。
您可以通过将 pageCount 设置为 Int.MAX_VALUE 并获取当前页面的模数来获取项目列表的索引来创建它。
@Preview
@Composable
private fun Test() {
val pageCount = Int.MAX_VALUE
val items = listOf("A", "B", "C")
val pagerState = rememberPagerState(
initialPage = pageCount / 2
)
HorizontalPager(
modifier = Modifier.fillMaxWidth(),
pageCount = pageCount,
state = pagerState
) {
Text(text = items[it % 3])
}
}
从 Compose 版本 1.6.0 开始
Int.MAX_VALUE(2147483647)
会导致寻呼机出现 ANR,为了防止这种情况,请添加一个大数字但小于 2147483647,这样用户就不会费心滚动那么远。
@Preview
@Composable
private fun InfinitePagerSample() {
Int.MAX_VALUE
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp)
.border(2.dp, Color.Red)
) {
val items = remember {
listOf("A", "B", "C")
}
val pageCount = items.size * 400
val pagerState = rememberPagerState(
initialPage = pageCount / 2,
pageCount = {
pageCount
}
)
HorizontalPager(
modifier = Modifier.fillMaxWidth(),
state = pagerState,
beyondBoundsPageCount = 1
) {
val color = if (it % items.size == 0) {
Color.Red
} else if (it % items.size != 1) {
Color.Yellow
} else Color.Green
Column(modifier = Modifier.fillMaxSize().background(color)) {
SideEffect {
println("Page $it, composing...")
}
Text(text = items[it % 3], modifier = Modifier.fillMaxSize(), fontSize = 70.sp)
}
}
}
}