2012-09-15 15 views
5

Quiero construir una cuadrícula como la de la aplicación Pinterest en Android.Pinterest como Grid en Android

empecé a extender una AdapterView<ListAdapter> pero no puedo hacer muchas cosas de trabajo (por ejemplo, el efecto Permitir desplazamiento) para, después de abandonar la idea de ampliar AbsListView, ahora estoy empezando pensando que es mejor extender un ListView y reemplazar el método layoutChildren() .

¿Qué opinas?

Gracias

+0

¿Ha encontrado la solución? –

+0

La solución es que estoy creando un componente AdapterView personalizado. Compartiré el componente en github, cuando se completará. – Matroska

+0

Gracias, publique su excelente código aquí –

Respuesta

0

Nosotros no vamos a necesitar ninguna librería externa para esto, como el RecyclerView nativo de Android hace la implementación de un diseño de mampostería Pinterest simplemente cambiando el Administrador de diseño de RecyclerView

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

Cool. es muy fácil, pero el margen en mi LinearLayout no parece funcionar. Así que aquí hay una solución rápida.

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

clase 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

AntipodalWall es una biblioteca independiente diseñado para proporcionar un llamado diseño de cuadrícula "mampostería" para Android (al igual que Pinterest aplicación).

Comprobar este proyecto AntipodalWall

+1

gracias por la respuesta. Parece una buena respuesta, pero desafortunadamente esa biblioteca proporciona solo un simple ViewGroup sin compatibilidad con el Adaptador y sin capacidades de reciclaje. – Matroska

+0

deje pensar la buena solución –

+0

Supongo que si está cargando tantas imágenes, puede eliminar las vistas al principio y agregar más vistas para terminar mientras se desplaza. –

6

he resuelto este copiando y actualizar StaggeredGridView de Android. https://github.com/maurycyw/StaggeredGridView. Parece que funciona muy bien para crear el efecto que estás buscando. Antes de esto, me fui por el agujero del conejo de copiar la fuente de Android a una biblioteca separada (que trabajé) hasta que vi el ahora experimental StaggeredGridView. Es mucho más simple que mi antiguo proyecto de biblioteca "BrickView", así que lo reemplacé.

+0

genial, hágamelo saber cómo va! – Maurycy

+0

StaggeredGridView tiene muchos problemas, y se pueden encontrar fácilmente girando la pantalla después de desplazarse un poco. Sugiero usar una biblioteca diferente. He publicado una nueva sugerencia si lo desea. –