2014-12-24 11 views
20


È possibile sovrapporre gli elementi di RecyclerView?
Lo sto provando con LinearLayoutManager.
I miei requisiti sono gli stessi di LinearLayoutManager e devo solo sovrapporre gli elementi all'interno dall'alto verso il basso. (come impilare le carte)Come sovrapporre gli elementi in LinearLayoutManager - RecyclerView (come le schede di impilamento)

Ho visto some variant utilizzando ListView. Quindi, immagino che sarebbe possibile anche in RecyclerView .Ma, dopo alcuni periodi di esplorazione, , mi sembra che ci vorrà un bel po 'di tempo per implementare un gestore di layout personalizzato e un po' di comprensione su questo. (Ho guardato nel post di Dave circa Building Custom LayoutManager)

Così, ora sto pensando che potrei solo bisogno di usare la variazione ListView in base alla mia esigenza invece di trattare con questo molto complessità del layout personalizzato manager.

Ma, ho solo bisogno di rendere gli elementi all'interno di sovrapposizione. Sento che potrebbe esserci qualche altra direzione che non ho ancora notato. Pls fammi sapere se c'è uno a parte sopra ListView varient e Custom Layout Manager.

Inserirò anche i miei risultati qui sotto.

+0

Forse è possibile utilizzare questo progetto https://github.com/Diolor/Swipecards? – kphil

risposta

27

Suppongo che stai cercando una sovrapposizione parziale (ad esempio un mazzo di carte leggermente a ventaglio). Se è così, questo sembra abbastanza semplice con RecyclerView e un oggetto personalizzato. Ecco un esempio banale di uno che si sovrappone gli elementi da 90px in senso verticale:

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

    } 
} 

Questo esempio codici duri l'offset, ma se le voci di elenco variano in altezza avrete bisogno di misurare e aggiungere la logica per questo.

Aggiungi questa decorazione al camper prima di impostare il layoutmanager. L'ho provato con StaggeredGrid ma dovrebbe funzionare anche con LinearLayout e Grid LM.

+1

Ha uno strano comportamento che mostra solo elementi che possono essere disegnati interamente. Non mostrerà la parte superiore del prossimo elemento sotto il più basso. – shiami

+2

Capisco che questa risposta potrebbe non essere adatta a tutti, ma non capisco i voti negativi. Funziona, anche se come nota shiami, non mostra la parte superiore dell'articolo qui sotto. Questa è ancora l'unica risposta che qualcuno ha fornito per questa domanda di 9 mesi e l'unico approccio suggerito che non richiede un gestore di layout personalizzato. – MojoTosh

+1

Per coloro che vogliono sapere come evitare l'elemento principale, provare qualcosa come: 'final int itemPosition = parent.getChildAdapterPosition (view); if (itemPosition == RecyclerView.NO_POSITION) { return; } 'per ottenere la posizione della vista. Salta la riga 'outRect.set()' per la voce in alto. –

Problemi correlati