2016-07-25 30 views

回答

2

可以实现这种RecyclerView行为与twoway-view

我测试了这个LIB的1.0.0-快照版本。

这是一种旧的项目(不再维护),但它可以帮助你编写你自己的RecyclerView/LayoutManager。布局的

在RecyclerViewAdapter需要设置跨度逻辑:

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     super.onBindViewHolder(holder, position); 
     final SpannableGridLayoutManager.LayoutParams lp = 
       (SpannableGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams(); 

     final int span1; 
     final int span2; 
     if (position == 0) { 
      span1 = 2; 
      span2 = 2; 
     } else if (position == 3) { 
      span1 = 2; 
      span2 = 3; 
     } else { 
      span1 = 1; 
      span2 = 1; 
     } 

     final int colSpan = (span2); 
     final int rowSpan = (span1); 

     if (lp.rowSpan != rowSpan || lp.colSpan != colSpan) { 
      lp.rowSpan = rowSpan; 
      lp.colSpan = colSpan; 
      holder.itemView.setLayoutParams(lp); 
     } 
} 

我使用的自定义RecyclerView从库(TwoWayView):

<org.lucasr.twowayview.widget.TwoWayView 
     android:id="@+id/fragment_drawer_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="60dp" 
     android:clipToPadding="false" 
     android:paddingBottom="32dp" 
     app:twowayview_layoutManager="SpannableGridLayoutManager" 
     app:twowayview_numColumns="3" 
     app:twowayview_numRows="3" /> 

结果截图: result screenshot