所以我有一个
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>
解决方法
我通常用
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));