2012-09-15 12 views
5

Voglio costruire una griglia come quella nell'app Pinterest su Android.Pinterest come Grid in Android

ho iniziato l'estensione di un AdapterView<ListAdapter> ma non riesco a fare molte cose di lavoro (ad esempio, l'effetto Overscroll) quindi, dopo aver abbandonato l'idea di estendere AbsListView, ora sto iniziando a pensare che è meglio per estendere un ListView e l'override del metodo layoutChildren() .

Cosa ne pensi?

Grazie

+0

Hai trovato la soluzione? –

+0

La soluzione è che sto creando un componente AdapterView personalizzato. Condividerò il componente su github, quando sarà completato. – Matroska

+0

Grazie, inserisci qui il tuo codice perfetto –

risposta

0

Noi non sarà bisogno di alcuna libreria esterna per questo come RecyclerView nativo di Android rende l'implementazione di un layout di muratura Pinterest semplicemente modificando il Layout Manager di RecyclerView

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

Freddo. è molto facile, ma il margine sul mio LinearLayout non sembra funzionare. Quindi ecco una soluzione rapida.

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

classe 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 è una libreria standalone progettato per fornire un cosiddetto layout a griglia "in muratura" per Android (molto simile a Pinterest app).

controllare questo progetto AntipodalWall

+1

grazie per la risposta. Sembra una buona risposta, ma sfortunatamente quella libreria fornisce solo un semplice ViewGroup senza supporto per gli adattatori e nessuna capacità di riciclaggio – Matroska

+0

lascia pensare alla buona soluzione –

+0

Immagino che se stai caricando tante immagini, puoi rimuovere le viste all'inizio e aggiungere altro viste per finire mentre scorri. –

6

ho risolto questo copiando e l'aggiornamento StaggeredGridView di Android. https://github.com/maurycyw/StaggeredGridView. Sembra funzionare bene per creare l'effetto che stai cercando. Prima di ciò, sono andato giù nella tana del coniglio di copiare il sorgente di Android in una libreria separata (che funzionava) finché non ho visto l'ormai sperimentale StaggeredGridView. È molto più semplice del mio vecchio progetto di libreria "BrickView", quindi l'ho sostituito.

+0

fantastico, fammi sapere come va! – Maurycy

+0

StaggeredGridView ha molti problemi, e possono essere trovati facilmente ruotando lo schermo dopo un po 'di scorrimento. suggerisco di utilizzare una libreria diversa. ho pubblicato un nuovo suggerimento, se lo desideri. –