Compose 中 Horizo​​ntalPager 的滑动灵敏度

jpm*_*jpm 7 android android-viewpager android-jetpack-compose jetpack-compose-accompanist

我实现了一个简单的Horizo​​ntalPager,它基本上按预期工作。我开发的应用程序适用于一个特定设备,即横向模式下的 8 英寸平板电脑。目前需要滑动超过 50% 的屏幕宽度才能到达下一页/上一页。这是一个非常长的滑动我想减少它以使更改页面更容易......

我尝试了fling 行为,并尝试在偏移量更改时手动更改页面或拦截触摸事件......没有什么真正导致所需的行为。

既然“问题”看起来如此简单,我真的希望我刚刚疏忽了一些事情。你知道我可以尝试什么吗?

jpm*_*jpm 5

这解决了我的问题,您可以编辑 minFlingDistanceDp 来更改灵敏度:

HorizontalPager(
            modifier = Modifier.fillMaxSize(),
            state = pagerState,
            count = noOfPages,
            flingBehavior = flingBehavior(pagerState = pagerState, noOfPages = noOfPages)
        ) { page ->
            //Content
        }


val minFlingDistanceDp = 150.dp

@OptIn(ExperimentalPagerApi::class, dev.chrisbanes.snapper.ExperimentalSnapperApi::class)
@Composable
fun flingBehavior(pagerState: PagerState, noOfPages: Int): FlingBehavior {
    var currentPageIndex = remember { pagerState.currentPage }
    return PagerDefaults.flingBehavior(
        state = pagerState,
        snapIndex = { layoutInfo, _, _ ->
            val distanceToStartSnap = layoutInfo.distanceToIndexSnap(currentPageIndex)
            currentPageIndex = when {
                distanceToStartSnap < -(minFlingDistanceDp.value) -> {
                    (currentPageIndex + 1).coerceAtMost(noOfPages - 1)
                }
                distanceToStartSnap > minFlingDistanceDp.value -> {
                    (currentPageIndex - 1).coerceAtLeast(0)
                }
                else -> {
                    currentPageIndex
                }
            }
            currentPageIndex
        }
    )
}
Run Code Online (Sandbox Code Playgroud)