4

I need to implement something like this:

enter image description here

Seems like StaggeredGridLayoutManager | GridLayoutManager can not do it, how to achieve it for now?

GridView has good performance?

1 Answer 1

2

You can achieve this kind of RecyclerView behavior with twoway-view

I tested the 1.0.0-SNAPSHOT version of this lib.

It's kind of old project (not maintened anymore), but it can help you to write your own RecyclerView/LayoutManager.

Example of your layout

In RecyclerViewAdapter you need to set the span logic:

@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);
        }
}

I used custom RecyclerView from the library (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: result screenshot

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.