2012-09-15 8 views
5

Ich möchte ein Raster wie das in Pinterest App auf Android bauen.Pinterest wie Grid in Android

Ich begann eine AdapterView<ListAdapter> erstreckt, aber ich kann nicht viele Dinge arbeiten (zum Beispiel die Überrolleffekt) so, nach dem Verzicht auf die Idee machen AbsListView zu verlängern, jetzt beginne ich dachte, es ist besser, ein ListView und überschreiben die layoutChildren() Methode erweitern .

Was denkst du?

Dank

+0

Haben Sie die Lösung herausfinden? –

+0

Die Lösung ist, dass ich eine benutzerdefinierte AdapterView-Komponente erstellen. Ich werde die Komponente auf GitHub teilen, wenn es abgeschlossen wird. – Matroska

+0

Danke, bitte posten Sie Ihren tollen Code hier –

Antwort

0

Wir werden keine externe Bibliothek mehr brauchen Denn das native RecyclerView von Android macht die Implementierung eines Pinterest-Mauerwerkslayouts einfach, indem der Layout-Manager des RecyclerViews

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

Kühl. Es ist sehr einfach, aber der Rand meines LinearLayout scheint nicht zu funktionieren. Also hier ist eine schnelle Lösung.

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

SpacesItemDecoration Klasse:

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 ist eine eigenständige Bibliothek entwickelt, um ein so genanntes "Mauerwerk" Raster-Layouts für Android (ähnlich wie Pinterest app) zur Verfügung zu stellen.

prüfen dieses Projekt AntipodalWall

+1

danke für die Antwort. Es scheint eine gute Antwort, aber leider bietet diese Bibliothek nur eine einfache ViewGroup ohne Adapter-Unterstützung und keine Recycling-Funktionen – Matroska

+0

lassen Sie die gute Lösung denken –

+0

Ich denke, wenn Sie so viele Bilder laden, können Sie die Ansichten am Anfang entfernen und mehr hinzufügen Ansichten, die beim Scrollen enden –

6

Ich habe dieses Problem gelöst durch Kopieren und Android StaggeredGridView aktualisieren. https://github.com/maurycyw/StaggeredGridView. Scheint gut zu funktionieren, um den gewünschten Effekt zu erzielen. Davor ging ich das Kaninchenloch runter, indem ich die Quelle von Android in eine separate Bibliothek kopierte (die ich funktionierte), bis ich das jetzt experimentelle StaggeredGridView sah. Es ist viel einfacher als mein altes "BrickView" -Bibliotheksprojekt, also habe ich es ersetzt.

+0

großartig, lassen Sie mich wissen, wie es geht! – Maurycy

+0

die StaggeredGridView hat viele Probleme, und sie können leicht durch Drehen des Bildschirms nach dem Scrollen gefunden werden. Ich schlage vor, eine andere Bibliothek zu verwenden. Ich habe einen neuen Vorschlag geschrieben, wenn Sie möchten. –