2013-06-26 7 views
14

Gibt es eine Möglichkeit, das ViewPager-Unterstützungspaket auf die nächste Seite mit einem kürzeren Ziehen einrasten zu lassen? Das Standardverhalten scheint zu sein, dass selbst wenn ich fast 75% ziehe, die Seite immer noch auf die vorherige Seite zurückschnappt, wenn ich loslasse. Ich möchte den Fangschwellenwert verringern und stattdessen den ViewPager auf die nächste Seite ausrichten lassen.Make ViewPager Snap mit kürzerem Ziehen

Beachten Sie, dass dies für das Ziehen der Geste galt. Eine Schleudergeste erfordert bereits eine viel kürzere Geste.

Antwort

22

Sie dieser Ad-hoc tun können, ohne sich Sorgen zu viel über die Interna von ViewPager, solange Sie die Zielzone erhöhen möchten:

private class MyPageChangeListener implements OnPageChangeListener { 
    private float mLastPositionOffset = 0f; 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
     if(positionOffset < mLastPositionOffset && positionOffset < 0.9) { 
      mViewPager.setCurrentItem(position); 
     } else if(positionOffset > mLastPositionOffset && positionOffset > 0.1) { 
      mViewPager.setCurrentItem(position+1); 
     } 
     mLastPositionOffset = positionOffset; 
    } 
} 
+0

Arbeitete wie ein Charme. Vielen Dank! – Juhani

+1

Gute Idee, obwohl ich denke, es fühlt sich ein bisschen seltsam an – astuetz

1

Diese Werte sind in einer privaten Methode fest codiert. Sie können also nicht einfach überschrieben werden.

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/support/v4/view/ViewPager.java#2075

+3

Richtig, aber die Werte aren‘ t 0.4/0.6f (wie sie sind Kürzel). Ich denke, es ist 60% der ViewPager-Breite für beide Richtungen. Ein Fling muss nur 25 Dips mit einer 400 Dip/s Geschwindigkeit sein. –

+0

@ChrisBanes Natürlich hast du recht, ich habe mich nur kurz angeschaut - danke! – astuetz