android 如何在垂直分页器中快速切换到下一页?

snvhrwxg  于 2022-12-16  发布在  Android
关注(0)|答案(1)|浏览(123)

我正在使用伴奏寻呼机库(版本0.18.0),并创建了一个垂直寻呼机显示某些图片。
向上/向下滚动时,所需的行为是滚动到下一张/上一张图片,这很有效,但在快速滚动时,它又在捕捉同一张图片。
我想切换到最轻微滚动的图片。
我尝试修改. flingBehavior,如下所述:How to set a threshold for LazyColumn/ViewPager before starting to scroll?
但是它没有如预期的那样工作。

s3fp2yjn

s3fp2yjn1#

简短回答

禁用overscroll

CompositionLocalProvider(
    LocalOverscrollConfiguration provides null
) {
    ViewPager()
}

长答案

我认为这是Pager.kt中使用的SnappingFlingBehavior的问题
我遇到了同样的问题,我找不到此问题的答案,但在onDragStopped()函数中查看Scrollable.kt的源代码后,我们可以在顶部看到此检查

val preOverscrollConsumed =
        if (overscrollEffect != null && overscrollEffect.isEnabled) {
            overscrollEffect.consumePreFling(axisVelocity.toVelocity()).toFloat()
        } else {
            0f
        }

如果启用了overscroll--这是您在列表的开始/结束处看到的类似于 bounce 的效果,并且在同一项上快速滚动的情况下,它会从velocity中消失。
这导致SnappingFlingBehavior.performFling()的实现和targetIndex(您希望在ViewPager中滚动到的索引)的内部performSpringFling计算与当前索引相同,因此不会移动。
如果禁用overscroll,您将获得预期的行为,但更好的解决方案是实现您自己的FlingBehavior

相关问题