Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pinterest like Grid in Android

I want to build a grid like the one in Pinterest app on Android.

I started extending an AdapterView<ListAdapter> but I cannot make many things working (for example the overscroll effect) so, after abandoning the idea to extend AbsListView, now I am starting thinking it is better to extend a ListView and override the layoutChildren() method.

What do you think?

Thanks

like image 881
Matroska Avatar asked Sep 15 '12 21:09

Matroska


2 Answers

We won’t be needing any external library for this as Android’s native RecyclerView makes implementing a Pinterest masonry layout simply by changing the RecyclerView’s Layout Manager

mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
RecyclerAdapter adapter = new RecyclerAdapter(this);
mRecyclerView.setAdapter(adapter);

Cool. it's Very easy ,but margin on my LinearLayout didn’t seem to work. So here’s a quick fix.

SpacesItemDecoration decoration = new SpacesItemDecoration(16);
mRecyclerView.addItemDecoration(decoration);

SpacesItemDecoration class:

public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private final int mSpace;

public SpacesItemDecoration(int space) {
    this.mSpace = space;
}

@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    outRect.left = mSpace;
    outRect.right = mSpace;
    outRect.bottom = mSpace;

    // Add top margin only for the first item to avoid double space between items
    if (parent.getChildAdapterPosition(view) == 0)
        outRect.top = mSpace;
    }
}

Github link of example

my final Results

like image 80
Anjal Saneen Avatar answered Oct 30 '22 19:10

Anjal Saneen


I have solved this by copying and updating Android's StaggeredGridView. https://github.com/maurycyw/StaggeredGridView . Seems to work great for creating the effect you are looking for. Before this I went down the rabbit hole of copying Android's source to a separate library (which I got working) until I saw the now experimental StaggeredGridView. It is much simpler than my old "BrickView" library project so I replaced it.

like image 29
Maurycy Avatar answered Oct 30 '22 20:10

Maurycy