Direi che sono comparabili in termini di utilizzo della memoria e facilità di implementazione. Dove differiscono di più è nell'interazione che forniscono all'utente.
ViewPager
è progettato per mostrare un articolo alla volta. L'elemento visibile occupa tutta la larghezza dello ViewPager
. Puoi scorrere solo un elemento alla volta e scorrere sempre a scatto per mostrare un elemento al centro: non ti verrà mai lasciato in una posizione intermedia che mostra parzialmente due elementi.
RecyclerView
con un gestore di layout orizzontale, d'altra parte può avere elementi di qualsiasi larghezza - si potrebbe essere che mostra molti oggetti in una volta o si potrebbe avere elementi più ampi che la larghezza RecyclerView
s' o si potrebbe abbinare la loro larghezza di imitare ViewPager
. Puoi scorrere liberamente - non sei limitato alla larghezza di un articolo o alla larghezza di RecyclerView
, puoi eseguire un gesto di lancio per scorrere grandi distanze. E non c'è azzeramento: quando lo scorrimento termina non ci sono elementi allineati al centro o a nessuno dei lati.
Come vedi ci sono alcune differenze. Ti consiglierei di scegliere il tuo widget in base all'interfaccia utente che desideri raggiungere. Se si desidera il comportamento di ViewPager
(un elemento visibile alla volta, scorrere il dito su un elemento e fare lo snap per mostrare l'elemento completo), quindi utilizzare lo ViewPager
. È possibile, ma non banale, replicare questo comportamento utilizzando uno RecycleView
. Direi sicuramente che è molto più difficile usare RecyclerView
se vuoi farlo comportarsi come ViewPager
. Viceversa è praticamente impossibile personalizzare il comportamento di ViewPager
, quindi se questo non è quello che vuoi, allora dovresti sicuramente usare uno RecyclerView
.
fonte
2016-07-03 08:11:01
Poiché la libreria di supporto 24.2.0, lo snap in Recycler View è ora molto facile da ottenere. Inoltre, è possibile simulare il comportamento di ViewPager ignorando la classe Snap Helper. http://stackoverflow.com/questions/29134094/recyclerview-horizontal-scroll-snap-in-center – aldok
Restituire * 0,5f * da 'FragmentStatePagerAdapter' L'opzione' getPageWidth() 'sostituisce la metà dello schermo. C'è un sovraccarico nel tracciare l'orientamento sinistra/destra. – samosaris