如何在开始滚动前设置LazyColumn/ViewPager的阈值? [英] How to set a threshold for LazyColumn/ViewPager before starting to scroll?

查看:23
本文介绍了如何在开始滚动前设置LazyColumn/ViewPager的阈值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用experimental viewpagerfor 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 ->
}

这篇关于如何在开始滚动前设置LazyColumn/ViewPager的阈值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆