我有一个 AppBarLayout 和 NestedScrollView。我想要 NestedScrollView 每当它向下滚动时,AppBarLayout 也应该优雅地展开,而 NestedScrollView 不会在 AppBarLayout 展开之前停止;需要第二次飞行/滚动才能完成。
我检查了stackoverflow,发现这个解决方案非常相关,可以使用。但是如果是NestedScrollView,那就是RecyclerView。它在https://stackoverflow.com/a/32454407/3286489
我基本上拿了代码并稍微改变了它,并用于检查速度 >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;
}
}
这有效,但并不理想。consumed = false
当 NestedScrollView 到达它的滚动顶部时,我只想开始(继续) AppBarLayout 上的 Fling(即 return )。我怎么能在 onNestedFling 中检查呢?
谢谢。