拦截RecyclerView向下嵌套NestedScrollView

时间:2019-06-04 15:18:51

标签: android android-recyclerview android-coordinatorlayout android-nestedscrollview

我的布局如下:

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/rootLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appBarLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.design.widget.CollapsingToolbarLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">

                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="160dp"
                    app:layout_collapseMode="parallax" />

                <android.support.v7.widget.Toolbar
                    android:layout_width="match_parent"
                    android:layout_height="52dp"
                    app:layout_collapseMode="pin" />
            </android.support.design.widget.CollapsingToolbarLayout>
        </android.support.design.widget.AppBarLayout>

        <android.support.v4.widget.NestedScrollView
            android:id="@+id/nestedScrollView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true"
            app:layout_behavior="com.example.CardViewBehavior">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <FrameLayout
                    android:id="@+id/fixedBanner"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                </FrameLayout>

                <FrameLayout
                    android:id="@+id/card1"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <!-- random content -->
                </FrameLayout>

                <FrameLayout
                    android:id="@+id/card2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <android.support.v7.widget.RecyclerView
                        android:id="@+id/recyclerView"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" />
                </FrameLayout>
            </LinearLayout>
        </android.support.v4.widget.NestedScrollView>
</layout>

fixedBannercard1向下滚动(手指向上)时,appBarLayout首先折叠,然后nestedScrollView向下滚动。但是,如果从recyclerView向下滚动,则recyclerView开始滚动。我希望nestedScrollViewrecyclerView之前先向下滚动。

我尝试使用在CardViewBehavior上设置的自定义nestedScrollView,如果appBarLayout没有完全折叠并且在{{1}中仍有滚动范围,它将覆盖onNestedPreScroll以消耗滚动增量}。

但是,如果我在nestedScrollView上滑动得足够快,则recyclerViewrecyclerView完全滚动到底部之前开始猛冲。我尝试覆盖nestedScrollView中的onNestedPreFlingonNestedFling,但是当RecyclerView开始自行翻转时,似乎从未调用过这两个方法。

如何确保在CardViewBehavior开始滚动之前,nestedScrollView滚动到底部?

1 个答案:

答案 0 :(得分:0)

扩展NestedScrollView并直接覆盖onNestedPreScroll方法。

(在https://www.androiddesignpatterns.com/2018/01/experimenting-with-nested-scrolling.html上找到了解决方案)