Ham*_*aei 11 android scroll android-jetpack android-jetpack-compose lazycolumn
我想要在 LazyColumn 中获得总滚动位置(以 px 为单位)。列本身有一个 ScrollState ,它有一个值(在文档中描述为以像素为单位的当前滚动位置值),但是 LazyColumn ScrollState 没有这个字段,我想要 LazyColumn 的 Column ScrollState 滚动位置值的完全相同,我如何可以借助 LazyScrollState 实现这一点吗?
它存在于 Column 中的原因是因为它在生成时知道所有项目(行)。
但是 LazyColumn 在任何给定时刻仅显示总视图的一部分,并且当您滚动时,它会不断地重新生成屏幕上的视图(加上可见区域上方和/或下方的几个视图),因此它实际上从未计算所有行的总高度。如果你想获得滚动位置,你必须手动计算它。如果每行的高度相同,效果会很好。但如果高度不同,那么您将无法获得准确的滚动位置(您的计算将根据当前显示的行的高度而波动)。但你必须自己计算一下:
计算所有项目的总大小
val totalItems = lazyListState.layoutInfo.totalItemsCount
val itemLengthInPx = lazyListState.layoutInfo.visibleItemsInfo.firstOrNull()?.size ?: 0
val totalLengthInPx = totalItems * itemLengthInPx
Run Code Online (Sandbox Code Playgroud)
计算当前滚动位置
val scrollPos = (lazyListState.firstVisibleItemIndex * itemLengthInPx) / totalLengthInPx
Run Code Online (Sandbox Code Playgroud)
但正如我之前提到的,此计算取决于每个项目的高度 ( itemLengthInPx),如果所有视图都相同,则效果非常好。但是您可以看到如果每个视图具有不同的高度,它会如何波动
| 归档时间: |
|
| 查看次数: |
10936 次 |
| 最近记录: |