2014-12-24 17 views
20


Czy istnieje możliwość nakładania się przedmiotów z RecyclerView?
Próbuję to z LinearLayoutManager.
Moje wymagania są takie same jak w LinearLayoutManager i muszę tylko pokrywać elementy wewnątrz od góry do dołu. (jak układanie kart)Jak nakładać się elementy w LinearLayoutManager - RecyclerView (jak karty układania)

Widziałem some variant przy użyciu ListView. Tak więc, myślę, że byłoby to możliwe w RecyclerView. Ale po pewnym czasie eksploracji, , wydaje mi się, że zajmie to trochę czasu, aby zaimplementować niestandardowy menedżer układu i do pewnego stopnia zrozumienie tego. do postu Dave'a o Building Custom LayoutManager)

Tak, teraz myślę, że może po prostu trzeba użyć wariancji ListView na podstawie mojego wymogu zamiast do czynienia z tym dużo złożoności niestandardowy układ Manager.

Ale, po prostu muszę sprawić, żeby przedmioty w środku zachodziły na siebie. Czuję, że może być jakiś inny kierunek, o którym jeszcze nie wiedziałem. Pls poinformować mnie, jeśli istnieje jakiś oprócz powyższych ListView varient i Custom Layout Manager.

Opublikuję również moje wyniki poniżej.

+0

Może możesz wykorzystać ten projekt https://github.com/Diolor/Swipecards? – kphil

Odpowiedz

27

Zakładam, że szukasz częściowego nachodzenia na siebie (np. Talia kart lekko wachlowana). Jeśli tak, to wydaje się dość proste z RecyclerView i niestandardową ItemDecoration. Oto banalny przykład taki, który pokrywa elementy o 90px pionie:

public class OverlapDecoration extends RecyclerView.ItemDecoration { 

    private final static int vertOverlap = -90; 

    @Override 
    public void getItemOffsets (Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 

    outRect.set(0, vertOverlap, 0, 0); 

    } 
} 

Ten przykład twarde koduje offset, ale jeśli elementy listy różnią się wysokością trzeba zmierzyć i dodać logikę do tego.

Dodaj tę dekorację do RV przed ustawieniem menedżera układu. Próbowałem go z StaggeredGrid, ale powinien również działać z LinearLayout i Grid LM.

+1

Ma dziwne zachowanie, które pokazuje tylko przedmioty, które można w całości rysować. Nie wyświetli górnej części następnego elementu poniżej najniższego z nich. – shiami

+2

Rozumiem, że ta odpowiedź może nie pasować do wszystkich, ale nie rozumiem tych głosowań. Działa, nawet jeśli jak zauważa shami, nie pokazuje on góry elementu poniżej. Jest to nadal jedyna odpowiedź, którą ktoś dostarczył na to 9-miesięczne pytanie i jedyne sugerowane podejście, które nie wymaga niestandardowego menedżera układu. – MojoTosh

+1

Dla tych, którzy chcą wiedzieć, jak uniknąć najlepszego przedmiotu, wypróbuj coś takiego: 'final int itemPosition = parent.getChildAdapterPosition (view); if (itemPosition == RecyclerView.NO_POSITION) { return; } ', aby uzyskać pozycję widoku. Pomiń linię 'outRect.set()' dla najwyższej pozycji. –

Powiązane problemy