Pinterest就像Android中的Grid一样

Mat*_*ska 8 android listview gridview pinterest

我想构建一个类似于Android上的Pinterest应用程序中的网格.

我开始扩展一个AdapterView<ListAdapter>但是我不能做很多工作(例如过度滚动效果)所以,在放弃扩展的想法后AbsListView,现在我开始认为扩展ListView和覆盖layoutChildren()方法更好.

你怎么看?

谢谢

Mau*_*ycy 6

我通过复制和更新Android的StaggeredGridView解决了这个问题.https://github.com/maurycyw/StaggeredGridView.似乎非常适合创建您正在寻找的效果.在此之前,我把Android的源代码复制到一个单独的库(我开始工作),直到我看到现在的实验性StaggeredGridView.它比我原来的"BrickView"库项目简单得多,所以我更换了它.


Anj*_*een 5

我们不需要任何外部库,因为Android的本机RecyclerView只需更改RecyclerView的布局管理器即可实现Pinterest砌体布局

mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
RecyclerAdapter adapter = new RecyclerAdapter(this);
mRecyclerView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

凉。这很简单,但是LinearLayout上的边距似乎不起作用。所以这是一个快速修复。

SpacesItemDecoration decoration = new SpacesItemDecoration(16);
mRecyclerView.addItemDecoration(decoration);
Run Code Online (Sandbox Code Playgroud)

SpacesItemDecoration类:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Github示例链接

我的最终结果