10

OK! Ho cercato di farlo da e per le ultime settimane e non riesco a trovare una buona soluzione su come posso realizzare ciò che voglio. Ho provato con HorizontalScrollView, Gallery (che è deprecato).Come qualcuno può creare una lista di scorrimento orizzontale con effetto di snap al centro

Ora sto esaminando RecycleView perché sono arrivato a questo metodo .smoothScrollToPosition() e ho pensato che potrebbe aiutarmi.

Ecco un esempio di quello che voglio realizzare:

enter image description here

devo anche essere in grado di creare le relativelayouts programmazione

Chiunque può segnalare a me come questo possa essere realizzato ? C'è un modo nativo per farlo?

MODIFICA: Dopo aver esaminato ulteriormente il suggerimento di @CommonsWare sull'esaminare ViewPager e il commonsware.com/blog/2012/08/20/ terzo post di Dave Smith, penso che questa sia la strada da percorrere. L'Havent lo ha ancora utilizzato per il mio uso, ma ha un bell'aspetto.

Sto usando campione Dave Smiths dal suo Github: https://gist.github.com/devunwired/8cbe094bb7a783e37ad1

+3

'ViewPager' può essere utilizzato per questo, a seconda dei vostri obiettivi: https://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html Vedi in particolare la terza opzione, da Dave Smith, in quel post. – CommonsWare

+0

Questo potrebbe essere esattamente quello che sto cercando. –

risposta

4

Non utilizzare questo approccio, che verrà utilizzato per la quantità di memoria (se ad un certo punto sarà necessario estendere a una soluzione più generica) perché si dovrà tenere un numero elevato di ViewPager Pagine (Fragment) in memoria. Ho avuto questa stessa sfida e ho realizzato questo con HorizontalListView.

Quindi è necessario creare uno Adapter che aggiungerà "stub" View 's per ottenere il primo o l'ultimo (potrebbe essere più a seconda delle viste visibili desiderate allo stesso tempo) centrato sullo schermo poiché questo è un ListView. Per l'effetto aggancio è possibile utilizzare qualcosa di simile (tutti gli elementi devono avere uguali dimensioni):

View.OnTouchListener hListViewsOnTouchListener = new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_UP && v instanceof HListView) { 
        View c = ((HListView) v).getChildAt(0); 
        int posToGo = Math.abs(c.getX()) < c.getWidth()/2 ? ((HListView) v).getFirstVisiblePosition() : ((HListView) v).getFirstVisiblePosition() + 1; 
        ((HListView) v).smoothScrollToPositionFromLeft(posToGo, 0); 
       } 
       return false; 
      } 
     }; 

Questo approccio non solo utilizza meno memoria, ma è generico per quanto riguarda il numero di visualizzazioni del bambino, è più liscia e tutta la elementi sono cliccabili (non solo quella centrato) ... beh, è ​​un ListView :)
Ecco una schermata dell'esempio output finale:
enter image description here enter image description here enter image description here

Tak e cura.

+0

Non hai la fortuna di avere qualche samplecode che potrei usare? –

+0

https://play.google.com/store/apps/details?id=me.mesmo.app – GuilhE

+0

Btw. Il collegamento che hai fornito a HorizontalListView è ora deprecato –

Problemi correlati