gpt4 book ai didi

android - 如何在 jetpack compose Lazy Column 上实现反弹效果

转载 作者:行者123 更新时间:2023-12-04 23:42:23 40 4
gpt4 key购买 nike

我想在 LazyColumn 上实现反弹“类似 iOS”的效果,但不知道如何实现它。
预期结果是:iOS like over scroll effect on Android (使用 RecyclerView)在列表的顶部和底部反弹。
我浏览了 Chris Bane 的鲷鱼:https://github.com/chrisbanes/snapper但它似乎不支持它。
我的猜测是我需要创建一些 LazyListScope 扩展,但很难弄清楚。
先感谢您!

最佳答案

That is not possible at the moment 03.14.2022


如果您在 Scrollable.kt 看到源代码 androidx.compose.foundation.gestures 中的类包有扩展功能 Modifier.scrollable
internal fun Modifier.scrollable(
state: ScrollableState,
orientation: Orientation,
overScrollController: OverScrollController?,
enabled: Boolean = true,
reverseDirection: Boolean = false,
flingBehavior: FlingBehavior? = null,
interactionSource: MutableInteractionSource? = null
): Modifier
该方法包含 OverScrollController
它在功能上处理过度滚动,不幸的是这个方法是内部的,所以我们不能在它的包之外使用它。
如果我们看到 Scroll.kt androidx.compose.foundation 包中的类,我们可以看到扩展方法 scroll() 也是私有(private)的,由 Modifier.verticalScroll 使用和 Modifier.horizontalScroll, 正在使用默认的过度滚动 Controller
private fun Modifier.scroll(
state: ScrollState,
reverseScrolling: Boolean,
flingBehavior: FlingBehavior?,
isScrollable: Boolean,
isVertical: Boolean
) = composed(
factory = {
val overScrollController = rememberOverScrollController()
...
@Composable
@OptIn(ExperimentalFoundationApi::class)
internal actual fun rememberOverScrollController(): OverScrollController {
val context = LocalContext.current
val config = LocalOverScrollConfiguration.current
return remember(context, config) {
if (config != null) {
AndroidEdgeEffectOverScrollController(context, config)
} else {
NoOpOverscrollController
}
}
}
目前我们只能禁用默认的过度滚动配置,如 answer 所示。 .或者设置自定义配置,只能设置颜色和偏移量,仅适用于 API < 31
 CompositionLocalProvider(
LocalOverScrollConfiguration provides OverScrollConfiguration(
glowColor = Color.Red, forceShowAlways = true, PaddingValues(10.dp)
)
) {
// your row, colum
}
enter image description here
我尝试使用 pointerInteropFilter 实现我自己的逻辑检测偏移量和 verticalScroll对于滚动功能。但是,当我包含 pointerInteropFilter 时,它与 verticalScroll 交互,并且 Column 变得滞后并且没有检测到正确的事件!
Column(
verticalArrangement = Arrangement.SpaceEvenly,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.fillMaxSize()
.offset {
IntOffset(0, offset.roundToInt())
}
.pointerInteropFilter { motionEvent ->

when (motionEvent.action) {
MotionEvent.ACTION_DOWN -> {
startFingerPositionY = motionEvent.rawY
}
MotionEvent.ACTION_MOVE, MotionEvent.ACTION_UP -> {
offsetY = startFingerPositionY - motionEvent.rawY
startFingerPositionY = motionEvent.rawY

}
}
true
}
.verticalScroll(state = state)
){

}
因此,谷歌允许自定义过度滚动效果是由谷歌决定的,并希望在 future ,他们会对此有所作为!

关于android - 如何在 jetpack compose Lazy Column 上实现反弹效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70754397/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com