滑动RecyclerView

时间:2015-08-23 01:07:55

标签: android android-recyclerview

我在RecyclerView中有一个LinearLayout。如何让LinearLayout向上“滑动”直到它到达App Bar,然后RecyclerView应该像往常一样开始滚动项目。同样,当列表中的第一个项目到达时,向下滚动列表将开始“滑动”整个容器,直到容器返回到其起始位置。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/nearby_stops"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipToPadding="false"
            android:paddingBottom="@dimen/half_padding"
            android:paddingTop="@dimen/half_padding"
            android:scrollbars="none" />

</LinearLayout>

enter image description here

我查看了https://github.com/umano/AndroidSlidingUpPanel,但它不支持RecyclerView当下。

1 个答案:

答案 0 :(得分:3)

RecyclerView放在Fragment内,为Fragment制作一个类似的XML:

这是RecyclerView的XML

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/nearby_stops"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="false"
        android:paddingBottom="@dimen/half_padding"
        android:paddingTop="@dimen/half_padding"
        android:scrollbars="none" />

</LinearLayout>

然后,Activity托管Fragment只需为FrameLayout添加Fragment

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

    <!-- Put other views here -->

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

 </LinearLayout>

然后在实例化ActivityFragment内部执行以下操作:

    SampleFragment listFragment = new SampleFragment();

    getSupportFragmentManager().beginTransaction()
            .setCustomAnimations(R.anim.abc_slide_in_bottom, R.anim.abc_slide_out_bottom,
                    R.anim.abc_slide_in_bottom, R.anim.abc_slide_out_bottom)
            .addToBackStack(null)
            .add(R.id.slidingFragmentContent, listFragment)
            .commit();

Android API中提供了动画R.anim.abc_slide_in_bottomR.anim.abc_slide_out_bottom

我还注意到您没有为LinearLayout设置任何方向。设置如此android:orientation="..."

的方向

您可以指定Button来显示Fragment,如下所示:

mButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        showFragment();
    }
});

----------------------------------------------- ---------------------

要在滚动时向上滚动RecyclerView,请使用以下内容:

Activity

创建这样的XML布局
<android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/map_view_height"
        android:orientation="vertical"
        android:fitsSystemWindows="true">>

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingToolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <YourCustomViewContainingTheMap
                app:layout_collapseMode="parallax"/>

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.CoordinatorLayout>

Fragment内向FrameLayout充气,然后在向上滚动时,应在Map上进行视差动画。如果您不想要Parallax效果,请设置app:layout_CollapseMode="pin"

以下是我创建的示例应用,您可以看到我向上滚动RecyclerView它向上滑动:

(请注意GIF上的帧动画效果不是很好)

要在地图上的滑动列表后面添加阴影,只需将app:layout_collapseMode设置为parallax,然后在MapView内的CollapsingToolbarLayout前面添加另一个视图可以是你的面具,它可以是一个简单的视图,然后你可以在向上滚动列表时调整它的alpha值。

最好使用原生的Android视图,我注意到AndroidSlidingPanelLayout有大约43个问题。