10

OK! Ich habe versucht, dies in den letzten paar Wochen zu tun und kann anscheinend keine gute Lösung finden, um zu erreichen, was ich will. Habe versucht mit HorizontalScrollView, Gallery (das ist veraltet).Wie kann jemand eine horizontale Scroll-Liste mit Snapping-Effekt auf die Mitte erstellen

Ich schaue jetzt in RecycleView, weil ich über diese Methode .smoothScrollToPosition() kam und dachte, das könnte mir helfen. Hier

ist eine Darstellung, was ich will erreichen:

enter image description here

Ich muss auch die relativelayouts erstellen können, programmatisch

mir jemand kann darauf hinweisen, wie dies erreicht werden kann, ? Gibt es einen nativen Weg, es zu tun?

EDIT: Nach weiterem Blick auf @CommonsWare Vorschlag über Blick in ViewPager und die commonsware.com/blog/2012/08/20/ dritten Post von Dave Smith Ich denke, das ist der Weg zu gehen. Havent hat es noch zu meinem Nutzen modifiziert, aber es sieht gut aus.

ich Dave Smiths Probe von seinem Github bin mit: https://gist.github.com/devunwired/8cbe094bb7a783e37ad1

+3

'ViewPager' kann dafür verwendet werden, abhängig von Ihren Zielen: https://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html Siehe insbesondere die dritte Option, aus Dave Smith, in diesem Post. – CommonsWare

+0

Dies könnte genau das sein, was ich suche. –

Antwort

4

nicht diesen Ansatz verwenden Sie, wird es zu viel Speicher verwenden (wenn irgendwann werden Sie auf eine generische Lösung verlängern müssen), weil Sie muss eine erhöhte Anzahl von ViewPager Seiten (Fragment) im Speicher behalten. Ich hatte dieselbe Herausforderung und das habe ich mit HorizontalListView erreicht.

Sie müssen also eine Adapter erstellen, die "Stubs" View 's hinzufügen wird, um die erste oder die letzte (könnte mehr abhängig von den gewünschten sichtbaren Ansichten zur gleichen Zeit sein) zentriert auf dem Bildschirm da dies ein ListView ist. Für die Schnappen Effekt, den Sie so etwas wie dieses (alle Angaben müssen Sie haben die gleichen Abmessungen) verwenden können:

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

Dieser Ansatz nicht nur weniger Speicher, aber es ist generisch in Bezug auf die Anzahl der Kinderblick, es ist glatter und alle Elemente sind anklickbar (nicht nur die zentrierte ein) ... na ja, es ist ein ListView :)
Hier ist ein Screenshot der endgültigen Ausgabe Beispiel:
enter image description here enter image description here enter image description here

Tak die Pflege.

+0

Sie haben nicht zufällig einen Samplecode, den ich verwenden könnte? –

+0

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

+0

Btw. Der Link, den Sie zu HorizontalListView bereitgestellt haben, ist jetzt veraltet –