繁体   English   中英

在 Jetpack Compose 中使用 SnapFlingBehavior 时如何捕捉到 LazyColumn 的初始索引?

[英]How do I SNAP to initial index of LazyColumn while using SnapFlingBehavior in Jetpack Compose?

好的,所以我在这里有一个非常有趣的问题。 让我们谈谈捕捉。 现在 snapping 是第一类 api(RIP Snapper lib),可供使用 LazyColumn 的 compose 开发人员使用,一个基本问题出现了......我如何初始化 LazyColumn 以便它在屏幕上精美且完美地捕捉到定义的索引/项目列中的元素而不是在视觉上停留在两个元素之间的中间? 为什么没有快照? https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior正如您在此处看到的,向 LazyColumns 添加 snap fling 行为非常简单且有用 - 特别是如果您有您的应用程序中的长列表。 这样一来,无论何时滚动或滑动该列,它都会完美地捕捉到最靠近 LazyColumn Widger 中心的最终项目问题是,没有提供 snapToIndex 方法....并且 animateToScrollIndex 似乎对 Snap 不友好,因为它导致触发的滚动动画停留在两个元素之间的最终位置。 我没有尝试过以编程方式捕捉到项目索引。 有任何想法吗?? 必须有一些可能的方法来解决这个基本问题。 如果有办法做到这一点,它可以大大增加 SnapFlingBehavior 在 LazyColumn 和 LazyRow 世界中的实用性(恕我直言,框架中一些最重要的性能相关小部件)。

有没有人找到以编程方式控制您当前捕捉到的索引的解决方案?

/** Basic usage **/

    val listState = rememberLazyListState()
    
    val flingBehavior = rememberSnapFlingBehavior()
    
    LazyColumn(state = listState, flingBehavior = flingBehavior) 


/** Exampe of things that don't result in snapping to an index **/

    listState by rememberLazyListState(firstVisibleItemIndex: 5)
     listState.animateScrollTo(index: 10)

来发现那个电话

listState.scroll{
    with(flingBehavior) {
      performFling(initialVelocity)
    }

}

从已启动的效果并传入用于配置 LazyColumn 的状态和投掷行为,将导致出现在屏幕上的列已经捕捉到一个项目。 只要您在创建惰性列表状态时为第一个可见项索引提供非 0 值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM