我正在使用带有 AppBarLayout 和 CollapsingToolbarLayout 的新 CoordinatorLayout。在 AppBarLayout 下方,我有一个带有内容列表的 RecyclerView。
当我向上和向下滚动列表时,我已验证在 RecyclerView 上滚动滚动有效。但是,我还希望 AppBarLayout 在扩展期间平滑滚动。
向上滚动以展开 CollaspingToolbarLayout 时,一旦手指离开屏幕,滚动就会立即停止。如果您快速向上滚动,有时 CollapsingToolbarLayout 也会重新折叠。RecyclerView 的这种行为似乎与使用 NestedScrollView 时的功能大不相同。
我试图在 recyclerview 上设置不同的滚动属性,但我无法弄清楚这一点。
这是一个显示 RecyclerView (CheeseDetailActivity) 问题的示例。 https://github.com/tylerjroach/cheesesquare
这是使用 Chris Banes 的 NestedScrollView 的原始示例。 https://github.com/chrisbanes/cheesesquare
主要问题是 RecyclerView 有时会给出不正确的投掷方向,因此如果您将以下代码添加到他的答案中,它可以正常工作:
public final class FlingBehavior extends AppBarLayout.Behavior { private static final int TOP_CHILD_FLING_THRESHOLD = 3; 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 RecyclerView && velocityY < 0) { final RecyclerView recyclerView = (RecyclerView) target; final View firstChild = recyclerView.getChildAt(0); final int childAdapterPosition = recyclerView.getChildAdapterPosition(firstChild); consumed = childAdapterPosition > TOP_CHILD_FLING_THRESHOLD; } 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; } }
我希望这个对你有用。