Pinterest就像Android中的Grid一样

时间:2012-09-15 21:50:42

标签: android listview gridview pinterest

我想在Android上构建一个像Pinterest应用程序中的网格。

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

您怎么看?

由于

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

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

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

冷却。它非常简单,但我的LinearLayout上的保证金似乎不起作用。所以这是一个快速修复。

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

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

Github link of example

my final Results

答案 2 :(得分:2)

  

AntipodalWall是一个独立的库,旨在为Android提供所谓的“砌体”网格布局(很像Pinterest应用程序)。

检查此项目AntipodalWall

答案 3 :(得分:2)

在我正在使用的项目中:https://github.com/GDG-Korea/PinterestLikeAdapterView

使用它非常轻松,内存消耗高效

Looks like that

答案 4 :(得分:0)

这可以通过对现有的recyclerview及其适配器进行少量更改来实现

要进行的更改是: 1.在您的活动/队中

uploadMediaAdapter = new UploadMediaAdapter(getActivity(),mediaArrayList);    
rv_uploaded.setAdapter(uploadMediaAdapter);
int spanCount = 2;
rv_uploaded.setLayoutManager(new StaggeredGridLayoutManager(spanCount, StaggeredGridLayoutManager.VERTICAL));

2。您的Recyclerview列表项是:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/dim_5"
    app:cardCornerRadius="@dimen/dim_5"
    app:cardUseCompatPadding="true"
    android:clipToPadding="true"
    >

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >

        <android.support.v7.widget.AppCompatImageView
            android:id="@+id/img_prev_photo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleType="fitXY"
            android:adjustViewBounds="true"
            />

        <android.support.v7.widget.AppCompatTextView
            android:id="@+id/txt_progress_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="8th August 2019"
            android:textSize="@dimen/text_size_17"
            android:textStyle="bold"
            android:layout_gravity="bottom|center_horizontal"
            android:textColor="@color/color_white"
            />

    </FrameLayout>


</android.support.v7.widget.CardView>

通过此操作,您可以实现所需的内容!