2014-03-26 8 views
5

Ich habe Probleme herauszufinden, wie ein Swipe-Ereignis auf der letzten Seite eines View Pager zu erfassen.Android ViewPager beim Wischen auf dem letzten Bildschirm

Grundsätzlich ist die Anforderung, dass wenn der Benutzer auf der letzten Seite ist und sie versuchen, zu wischen, um zur nächsten Seite zu gelangen, die Aktivität geschlossen werden sollte.

Ich habe versucht, dies onPageScrolled, aber ich kann nicht scheinen, einen linken oder rechten Swipe zu unterscheiden, wenn Sie dort sind. Auf der letzten Seite sollte der Benutzer weiterhin die Funktionalität beibehalten, um zur vorherigen Seite zu wechseln.

Also im Grunde der Fall ist

When on last page 
    if swipe prev (do normal behaviour) 
    if swipe next (finish activity) 

jemand irgendwelche Vorschläge zur Verfügung stellen kann? Danke

Antwort

5

Sie sollten eine falsche leere Seite zu Ihrem ViewPager hinzufügen, wenn Benutzer Ihre tatsächliche letzte Seite wischt, kommt es zu diesem gefälschten. Wenn diese Fälschung sichtbar ist, beenden Sie die Activity.

Sie sollten diesen Weg versuchen, wenn es nicht funktioniert, kann ich Ihnen einen Beispielcode geben.

+1

Nicht die Art von Lösung, nach der ich suchte, aber ich gebe Ihnen das Häkchen, da niemand sonst etwas angeboten hat. – SikhWarrior

+0

Wenn Sie weiter erklären, kann ich die Antwort bearbeiten. Warum magst du es nicht? Es ist einfach und effektiv. – tasomaniac

+3

Wenn Sie einen beliebigen Pager-Indikator verwenden, wird dieser als zusätzliches Element angezeigt. Wenn Sie onDraw in einem Ansichtspager außer Kraft setzen, um ein Parallaxenbild anzuzeigen, wird der Prozentsatz des Bildscrollens reduziert. –

8

Ich bin wahrscheinlich sehr spät, aber dann könnte dies jemand anderen auf der ganzen Linie helfen. Ich habe das Snippet von einer Frage auf stackoverflow bekommen, wo ich gerade den Code ein wenig zwicke.

Antwort von here.

ViewPager.OnPageChangeListener pagerListener = new ViewPager.OnPageChangeListener() { 
    boolean lastPageChange = false; 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels){ 
     int lastIdx = mPgScreenAdapter.getCount() - 1; 

     Log.d(TAG, "pos:" + position); 
     if(lastPageChange && position == lastIdx) {} 

    } 
    @Override 
    public void onPageSelected(int i) { 
     pgText.setCurrentItem(i/2); 
    } 
    @Override 
    public void onPageScrollStateChanged(int state) { 
     int lastIdx = mPgScreenAdapter.getCount() - 1; 

     int curItem = pgScreen.getCurrentItem(); 
     if(curItem==lastIdx && state==1){ 
      lastPageChange = true; 

      // i put this here since onPageScroll gets called a couple of times. 
      finish(); 
     }else { 
      lastPageChange = false; 
     } 
    } 
}; 
+0

Es ist korrekt, aber wenn ich zurück zum letzten Index komme, geht es auch zur nächsten Aktivität. – influx

0

Hoffe, dass Sie eine Antwort bekam, ich über die gleiche Frage kam, und das ist, was ich tat: Incase Sie eine viewpager und eine Tätigkeit mit einer Klasse verwenden FragmentStatePagerAdapter erstrecken Sie die getItem(int position) Methode verwenden können, wenn zu überprüfen Du hast die letzte Seite erreicht. Dies gilt auch, wenn Sie NUM_PAGES deklariert haben und Sie können damit feststellen, dass der Benutzer die letzte Seite erreicht hat.

6

Hier ist die funktionierende Lösung !!

Erforderliche Variablen

.... 
private boolean isLastPageSwiped; 
private int counterPageScroll; 
.... 

Innen onPageScrolled von ViewPager

@Override 
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
    //Here 6 is last position 
    if (position == 6 && positionOffset == 0 && !isLastPageSwiped){ 
     if(counterPageScroll != 0){ 
      isLastPageSwiped=true; 
      //Next Activity here 
     } 
     counterPageScroll++; 
    }else{ 
     counterPageScroll=0; 
    } 
} 
0

ich mein Glück auch Lösung zu finden versucht. Hier funktioniert code.Hope es wird jemand anderem helfen: -

pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 


      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

       if (state == ViewPager.SCROLL_STATE_IDLE) { 
        int curr = pager.getCurrentItem(); 
        int lastReal = pager.getAdapter().getCount() - 1; 

        if (curr < lastReal) { 
         counter = 0; 
        } else if (curr == lastReal) { 
         counter++; 

         if (counter == 2) { 

          pager.setOffscreenPageLimit(0); 
          pager.setCurrentItem(0, false); 
          counter = 0; 
         } 


        } 
       } 

      } 
     }); 

     pagerIndicator.setViewPager(pager); 

Ich benutzte Counter als globale Variable.

Danke!

Verwandte Themen