我在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>
我查看了https://github.com/umano/AndroidSlidingUpPanel,但它不支持RecyclerView
当下。
答案 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>
然后在实例化Activity
时Fragment
内部执行以下操作:
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_bottom
和R.anim.abc_slide_out_bottom
。
我还注意到您没有为LinearLayout
设置任何方向。设置如此android:orientation="..."
您可以指定Button
来显示Fragment
,如下所示:
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showFragment();
}
});
RecyclerView
,请使用以下内容:为Activity
:
<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个问题。