簡體   English   中英

Android 中的卡片輪播與 Jetpack Compose

[英]Card carousel in Android with Jetpack Compose

我想創建可組合的 function,它可以顯示如下圖所示的元素(卡片)。 有什么辦法可以用 LazyList 或 LazyColumn 做到這一點

我試過谷歌伴奏的 VerticalPager,但我不知道如何像圖片上那樣設置它們在此處輸入圖像描述

我也想在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM