2015-12-15 111 views
5

所以我有一个ImageView作为背景,并在它的顶部一个水平RecyclerView,这里的事情是,我想RecyclerView开始显示其从左半边填充的项目,所以你可以在开始时完美地看到背景,并且当您滚动隐藏图像/背景的项目时。水平RecyclerView与开始填充

注意:选中Play商店即可查看我要完成的操作。

enter image description here

所以我有这样的工作:

<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> 

我的观点出现了以编程方式膨胀Horizo​​ntalScrollView里面的布局,它很好的工作。但随着时间的推移,我决定迁移到RecyclerView,现在不能按预期工作。

出现的背景下,回收站开始半个屏幕的右侧,但滚动它不会滚动,直到屏幕左边的时候,它只是隐藏的地方填充设置..

<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> 

回答

9

而不是使用的填充物,我通常达到这种效果与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)); 
+1

工作顺利。 非常感谢!我没有考虑这是一个Android问题,但更可能是一个css问题:) –

+0

这是Kotlin RTL支持的扩展版本: https://gist.github.com/sevar83/1172423f265e1cbb7a04f3d22b12021a – WindRider

+1

hi @GuillermoLópez ,除了我在左边有一个按钮之外,我需要相同的行为。我们如何实现这一目标? – Sac

1

这比简单得多,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" />