[英]Card carousel in Android with Jetpack Compose
我也想在 Compose 中制作輪播,但我找不到,所以我做了。 結果並不完美(太高會導致身高問題),但可以舉個例子。
我制作了一個無限的 LazyColumn 並更改了內容的比例和 zIndex 以產生輪播效果。
這是我的 function:
@Composable
fun Carousel(
count: Int,
parentModifier: Modifier = Modifier.fillMaxWidth().height(540.dp),
contentWidth: Dp,
contentHeight: Dp,
content: @Composable (modifier: Modifier, index: Int) -> Unit
) {
val listState = rememberLazyListState(Int.MAX_VALUE / 2)
BoxWithConstraints(
modifier = parentModifier
) {
val halfRowWidth = constraints.maxWidth / 2
LazyColumn(
state = listState,
modifier = Modifier.fillMaxSize(),
contentPadding = PaddingValues(top = 10.dp),
verticalArrangement = Arrangement.spacedBy(-contentHeight / 2),
horizontalAlignment = Alignment.CenterHorizontally
) {
items(
count = Int.MAX_VALUE,
itemContent = { globalIndex ->
val scale by remember {
derivedStateOf {
val currentItem = listState.layoutInfo.visibleItemsInfo.firstOrNull { it.index == globalIndex } ?: return@derivedStateOf 0.85f
(1f - minOf(1f, abs(currentItem.offset + (currentItem.size / 2) - halfRowWidth).toFloat() / halfRowWidth) * 0.25f)
}
}
content(
index = globalIndex % count,
modifier = Modifier
.width(contentWidth)
.height(contentHeight)
.scale(scale)
.zIndex(scale * 10)
)
}
)
}
}
}
我這樣稱呼 function:
Carousel(
count = list.size,
contentWidth = maxWidth,
contentHeight = 200.dp,
content = { modifier, index ->
MyComposableContent(
item = list[index],
modifier = modifier
)
}
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.