有没有办法添加滚动条来添加LazyColumn
(ScrollableColumn
已弃用)。 Javadoc 没有提及 Jetpack Compose 中有关滚动条的任何内容。
Just to clarify, this is the design I want to implement:
是否有可能在 Jetpack Compose 中做到这一点?或者不支持滚动条?
现在实际上是可能的(他们在 LazyListState 中添加了更多内容)并且非常容易做到。这是一个非常原始的滚动条(始终可见/无法拖动/等),它使用项目索引来确定拇指位置,因此当在只有很少项目的列表中滚动时,它可能看起来不太好:
@Composable
fun Modifier.simpleVerticalScrollbar(
state: LazyListState,
width: Dp = 8.dp
): Modifier {
val targetAlpha = if (state.isScrollInProgress) 1f else 0f
val duration = if (state.isScrollInProgress) 150 else 500
val alpha by animateFloatAsState(
targetValue = targetAlpha,
animationSpec = tween(durationMillis = duration)
)
return drawWithContent {
drawContent()
val firstVisibleElementIndex = state.layoutInfo.visibleItemsInfo.firstOrNull()?.index
val needDrawScrollbar = state.isScrollInProgress || alpha > 0.0f
// Draw scrollbar if scrolling or if the animation is still running and lazy column has content
if (needDrawScrollbar && firstVisibleElementIndex != null) {
val elementHeight = this.size.height / state.layoutInfo.totalItemsCount
val scrollbarOffsetY = firstVisibleElementIndex * elementHeight
val scrollbarHeight = state.layoutInfo.visibleItemsInfo.size * elementHeight
drawRect(
color = Color.Red,
topLeft = Offset(this.size.width - width.toPx(), scrollbarOffsetY),
size = Size(width.toPx(), scrollbarHeight),
alpha = alpha
)
}
}
}
更新:
我已经更新了代码。我已经弄清楚如何在 LazyColumn 滚动或不滚动时显示/隐藏滚动条+添加淡入/淡出动画。我还将drawBehind()更改为drawWithContent(),因为前者在内容后面绘制,因此在某些情况下它可能会在滚动条的顶部绘制,这很可能是不可取的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)