gpt4 book ai didi

android - 带有滑动手势的运动布局 + SwipeRefreshLayout + RecyclerView 错误向上滚动的错误行为

转载 作者:行者123 更新时间:2023-12-04 11:18:02 26 4
gpt4 key购买 nike

我正在使用 MotionLayout 构建包含 2 个部分的 UI - 顶部带有一些 View ,底部带有 SwipeRefresh 和 RecyclerView。此外,我对 MotionLayout 有一个手势 - SwipeRefresh 在向上滑动时向上移动到顶 View 上方。问题是当我将 RecyclerView 滚动到底部(顶 View “折叠”)然后到顶部时 - MotionLayout 立即开始反转我的转换(“展开”) - 当 RecyclerView 没有完全滚动到顶部而不是滚动 RecyclerView第一的。当我的 SwipeRefresh 正在更新或刷新时,它可以正常工作。禁用它会导致刷新布局进度条在没有动画的情况下消失 - 这不是一个好的解决方案。任何解决方法?

Layout xml gist

Layout scene gist

最佳答案

我在浏览 MotionLayout 的官方错误修复历史时遇到了同样的问题并想出了一个解决方案。您必须覆盖 onNestedPreScroll MotionLayout 的方法如下:

/**
* The current version of motionLayout (2.0.0-beta04) does not honor the position
* of the RecyclerView, if it is wrapped in a SwipeRefreshLayout.
* This is the case for the PullRequest screen: When scrolling back to top, the motionLayout transition
* would be triggered immediately instead of only as soon as the RecyclerView scrolled back to top.
*
* This workaround checks if the SwipeRefresh layout can still scroll back up. If so, it does not trigger the motionLayout transition.
*/
class SwipeRefreshMotionLayout : MotionLayout {

constructor(context: Context) : super(context)

constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)

constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

override fun onNestedPreScroll(target: View, dx: Int, dy: Int, consumed: IntArray, type: Int) {
if (!isInteractionEnabled) {
return
}

if (target !is SwipeRefreshLayout) {
return super.onNestedPreScroll(target, dx, dy, consumed, type)
}

val recyclerView = target.getChildAt(0)
if (recyclerView !is RecyclerView) {
return super.onNestedPreScroll(target, dx, dy, consumed, type)
}

val canScrollVertically = recyclerView.canScrollVertically(-1)
if (dy < 0 && canScrollVertically) {
// don't start motionLayout transition
return;
}

super.onNestedPreScroll(target, dx, dy, consumed, type)
}
}
将此 MotionLayout 与 SwipeRefreshLayout 结合使用对我来说效果很好。
我也发布了这个 here ,以防您想跟踪 Google 的错误修复。

关于android - 带有滑动手势的运动布局 + SwipeRefreshLayout + RecyclerView 错误向上滚动的错误行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60922207/

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