所以我有一个ImageView作为背景,并且在它上面有一个Horizontal RecyclerView,这里的事情是我希望RecyclerView从屏幕的半填充到左边开始显示它的项目,这样你就可以完美地看到背景在开始时和滚动项目时,您将隐藏图像/背景。
注意:请查看Play商店以了解我要完成的工作。
所以我有这个工作:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000052"
android:orientation="vertical" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="200dp"
android:scaleType="centerCrop"
android:src="@drawable/trybg5"
android:layout_gravity="left" />
<HorizontalScrollView
android:id="@+id/frag_home_gallery_recent_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="right"
android:scrollbars="none"
android:layout_weight="1"
android:paddingBottom="@dimen/horizontalGallery_content_padding"
android:paddingTop="@dimen/horizontalGallery_content_padding">
<LinearLayout
android:id="@+id/frag_home_gallery_recientes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="150dp" />
</HorizontalScrollView>
</RelativeLayout>
我的观点是以编程方式夸大HorizontalScrollView内部的布局,并且它运行良好。但随着时间的推移,我决定迁移到RecyclerView,现在没有按预期工作。
出现背景,Recycler从右侧开始半屏,但滚动时它不会滚动直到屏幕左侧,它只会隐藏设置填充的位置..
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000052"
android:orientation="vertical" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="200dp"
android:scaleType="centerCrop"
android:src="@drawable/trybg5"
android:layout_gravity="left" />
<FrameLayout
android:id="@+id/frag_home_gallery_recent_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="right"
android:scrollbars="none"
android:layout_weight="1"
android:paddingBottom="@dimen/horizontalGallery_content_padding"
android:paddingTop="@dimen/horizontalGallery_content_padding">
<android.support.v7.widget.RecyclerView
android:background="@drawable/gallery_bg"
android:id="@+id/frag_home_gallery_recientes"
android:scrollbars="none"
android:paddingLeft="150dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</FrameLayout>
</RelativeLayout>
如何知道如何在RecyclerView中使用此效果?
以下是回收商的详细信息:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:id="@+id/discoContainer"
android:background="@drawable/gallery_bg"
android:layout_margin="5dp"
android:padding="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/containerDisco"
android:orientation="vertical">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/logoDisco"
android:transitionName="DiscoId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:contentDescription="LogoDisco"
android:windowSharedElementsUseOverlay="false" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="a 600m tuyos"
android:padding="3dp"
android:layout_gravity="center_horizontal"
android:maxLines="1"
android:gravity="center_horizontal"
android:alpha="500"
android:background="#46000000"
android:textColor="@android:color/white"/>
</RelativeLayout>
<TextView
android:id="@+id/logoTexto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Probando"
android:padding="3dp"
android:layout_gravity="center_horizontal"
android:maxLines="1"
android:gravity="center_horizontal"
android:layout_alignBottom="@+id/containerDisco" />
</LinearLayout>
</LinearLayout>
答案 0 :(得分:11)
这比这简单得多,RecyclerView
已经有了这个功能:只需将android:clipToPadding="false"
设置为RecyclerView
XML,这样填充就不会剪掉你的项目。
所以对你的例子来说:
<android.support.v7.widget.RecyclerView
android:background="@drawable/gallery_bg"
android:id="@+id/frag_home_gallery_recientes"
android:scrollbars="none"
android:paddingLeft="150dp"
android:clipToPadding="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
答案 1 :(得分:10)
我通常使用ItemDecoration来实现这种效果,而不是使用填充。
public class PaddingItemDecoration extends RecyclerView.ItemDecoration {
private final int size;
public PaddingItemDecoration(int size) {
this.size = size;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
// Apply offset only to first item
if (parent.getChildAdapterPosition(view) == 0) {
outRect.left += size;
}
}
}
然后当您设置RecyclerView
:
int size = ... // Get the offset that you want
RecyclerView recyclerView = ...
recyclerView.addItemDecoration(new PaddingItemDecoration(size));