我有一個Column和一個LazyColumn,代碼如下:
我有一個Column和一個LazyColumn。
Column {
LazyColumn(
modifier = Modifier.weight(1f)。
contentPadding = PaddingValues(top = 8.dp)
) {
items(items = items) { it ->
TodoRow(
todo = it,
onItemClicked = { onRemoveItem(it) },
modifier = Modifier.fillParentMaxWidth()
)
}
}
}
我想獲得的東西如下:
- 要有一個帶有Text()的Box(),說明我們現在正處在一個非常重要的位置。
- 要有一個帶有Text()的Box(),說明我們在 "串列的頂部";
- 這個帶有Text()的Box()不能被固定。也就是說,當串列變大并占據整個螢屏時,它就會逐漸消失。如果我們向上滾動,Text()又會出現。
對于帶文本的盒子,我有以下代碼:
Box(
修改器 = 修改器
.fillMaxWidth()
.padding(start = 8.dp, end = 8.dp)
.background(color = Color.LightGray)。
內容對齊方式 = Alignment.Center
)
{ Text("Top of the List", modifier = Modifier.padding(vertical = 8.dp)) }
如果我把這個盒子作為上述LazyColumn之前的Column的孩子,這個盒子就會被固定,而我不希望這樣。
那么,我應該把這個盒子放在哪里?你能幫助我嗎?
謝謝你
uj5u.com熱心網友回復:
你可以從串列狀態中讀取滾動位置。根據這個位置,你可以為你的 "影片 "計算出進度。
Column {
val listState = rememberLazyListState()
val topOfListProgress: Float by remember {
derivedStateOf {
listState.run {
if (firstVisibleItemIndex > 0) {
0f {
} else {
layoutInfo.visibleItemsInfo
.firstOrNull()
?.讓 {
1f - firstVisibleItemScrollOffset.toFloat() / it.size
} ?: 1f ?
}
}
}
}
盒子(
contentAlignment = Alignment.Center,
修改器 = 修改器
.填充最大寬度()
.padding(start = 8.dp, end = 8.dp)
.background(color = Color.LightGray)
.layout { measurable, constraints ->
val placeable = measurable.measure(constraints)
val offset = (placeable.height * (1f - topOfListProgress)).roundToInt()
layout(placeable.width, placeable.height - offset) {
placeable.place(0, -offset)
}
}
.alpha(topOfListProgress)
) {
Text("Top of the List", modifier = Modifier.padding(vertical = 8.dp) )
}
LazyColumn(
state = listState,
contentPadding = PaddingValues(top = 8.dp) 。
修改器 = 修改器
.weight(1f)
) {
items(100) {
Text(it.toString())
}
}
}
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/311875.html
標籤:
