gpt4 book ai didi

android - 使用 AppBarLayout.Behavior 将 AppBarLayout 与 NestedScrollView 流畅地结合在一起

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:28:31 27 4
gpt4 key购买 nike

我有一个 AppBarLayout 和 NestedScrollView。我希望 NestedScrollView 每当它向下滚动时,AppBarLayout 也应该优雅地展开,而 NestedScrollView 不会在 AppBarLayout Expand 之前停止;需要第二次飞行/滚动才能完成。

我检查了 stackoverflow,发现这个解决方案非常相关,并且可以使用。但如果是 NestedScrollView,它就是 RecyclerView。它在 https://stackoverflow.com/a/32454407/3286489

我基本上采用了代码并稍作更改,并用于检查速度 >8000 以考虑也将 AppBarLayout Fling 作为下面的代码。

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 到达其滚动顶部时开始(继续)AppBarLayout 上的 Fling(即返回 consumed = false)。我如何在 onNestedFling 中检查它?

谢谢。

最佳答案

您应该检查 NestedScrollView 和 NestedScrollingChild

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


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

关于android - 使用 AppBarLayout.Behavior 将 AppBarLayout 与 NestedScrollView 流畅地结合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36052307/

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