kotlin - 如何在开始滚动之前为 LazyColumn/ViewPager 设置阈值?
问题描述
我正在使用基于/的 Jetpack compose的实验性查看器。LazyColumn
Row
我要做的是设置一些阈值,即在手指开始滚动到下一页之前我需要移动多少。默认行为是,只要我移动手指,它就会开始滚动,但我希望在发生任何视觉滚动之前有一个更大的阈值来确定我需要移动多少手指。我查看了FlingBehaviour
参数,但我不知道如何使用它来完成我想要的。(或者至少增加一些“阻力”在页面之间翻转,所以它不是那么敏感)
你有什么想法吗?
解决方案
此阈值由flingBehavior
参数控制。
PagerDefaults.flingBehavior(pagerState)
提供分页工作,目前只有动画是可配置的,所以你不能只提供自己的行为来代替。但是你可以像这样包装它:
private class FlingBehaviourMultiplier(
private val multiplier: Float,
private val baseFlingBehavior: FlingBehavior
) : FlingBehavior {
override suspend fun ScrollScope.performFling(initialVelocity: Float): Float {
return with(baseFlingBehavior) {
performFling(initialVelocity * multiplier)
}
}
}
@Composable
fun rememberFlingBehaviorMultiplier(
multiplier: Float,
baseFlingBehavior: FlingBehavior
): FlingBehavior = remember(multiplier, baseFlingBehavior) {
FlingBehaviourMultiplier(multiplier, baseFlingBehavior)
}
用法:
val pagerState = rememberPagerState()
HorizontalPager(
count = 10,
state = pagerState,
flingBehavior = rememberFlingBehaviorMultiplier(
multiplier = 0.5f,
baseFlingBehavior = PagerDefaults.flingBehavior(pagerState)
),
modifier = Modifier
) { page ->
}
推荐阅读
- geoserver - Geoserver WMTS 瓦片元数据
- maven - microservice-package-maven-plugin 通过命令行跳过容器构建
- javascript - 仅在 android 设备上出现“Uncaught SyntaxError: Unexpected reserved word”错误?
- c# - c# GroupPrincipal.GetMembers 性能问题
- mongoose - 为什么猫鼬将我的号码存储为 Double
- python - Matplotlib 线程;关闭特定的图形实例
- wso2 - 错误 - 使用 WSO2 EI 1.1 的 JmsStore 存储
- laravel - 如何使用 Laravel Collection groupBy 和查询分页?
- ios - 比较两个单元格中的值
- java - 使用 Spring Cloud Stream 的 Spring REST 请求响应