使用AppBarLayout.Behavior平稳地滑动AppBarLayout和NestedScrollView

13
我有一个AppBarLayout和NestedScrollView。每当NestedScrollView向下滚动时,我希望AppBarLayout也能优雅地展开,而不是NestedScrollView停在AppBarLayout展开之前;需要进行第二次滑动才能完成。
我查看了stackoverflow并发现了这个解决方案与我的问题非常相关,可以使用。但是不是NestedScrollView,而是RecyclerView。它在https://dev59.com/-F0Z5IYBdhLWcg3w6jwe#32454407中。
我基本上采用了代码并稍作更改,并使用以下代码检查速度> 8000,以考虑同时滑动AppBarLayout。
public final class FlingBehavior extends AppBarLayout.Behavior {
    private boolean isPositive;

    public FlingBehavior() {
    }

    public FlingBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onNestedFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY, boolean consumed) {
        if (velocityY > 0 && !isPositive || velocityY < 0 && isPositive) {
            velocityY = velocityY * -1;
        }

        if (target instanceof NestedScrollView && Math.abs(velocityY) > 8000) {
            consumed = false;
        }
        return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, consumed);
    }

    @Override
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed) {
        super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);
        isPositive = dy > 0;
    }
}
这样可以运作,但不是理想的方式。我只想在 NestedScrollView 滚动到顶部时(即返回 consumed = false),在 AppBarLayout 上启动(继续) Fling。在 onNestedFling 中如何检查呢?
谢谢。

你好,你有解决这个问题的方法吗? - Harry Sharma
不,根据我的建议进行临时解决。也许提高问题的评分需求会吸引更多人注意并解决这个问题? - Elye
没错,我在这里发布了几乎相同的问题.. https://dev59.com/muk6XIcBkEYKwwoYBvXb - Harry Sharma
2个回答

1

1

您应该检查NestedScrollView和NestedScrollingChild

    if (target instanceof NestedScrollView && Math.abs(velocityY) > 8000) {
        consumed = false;
    }


    if (target instanceof NestedScrollingChild && Math.abs(velocityY) > 8000) {
        consumed = false;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接