2012-06-05 12 views
5

Vorrei essere informato quando l'animazione si conclude dopo questa chiamata di funzione:Android viewpager animazione

viewPager.setCurrentItem(2, true); 

Qualcuno sa come eseguire questa operazione?

risposta

-1

È possibile utilizzare un OnPageChangeListener ..

viewPager.setOnPageChangeListener(new OnPageChangeListener() { 

    @Override 
    public void onPageSelected(int arg0) { 
     // The code you want to run when scrolling is complete    
    } 

    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) {} 

    @Override 
    public void onPageScrollStateChanged(int arg0) {} 
}); 

Quando si seleziona una nuova pagina, onPageSelected() viene chiamato.

+0

Dai documenti onPageSelected() - Questo metodo verrà richiamato quando viene selezionata una nuova pagina. ** L'animazione non è necessariamente completa **. http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html#onPageSelected(int) – djdmbrwsk

25

Ho riscontrato lo stesso problema. la seguente conclusione è la seguente:

Quando la pagina viene effettivamente modificata, viene chiamata la pagina selezionata. Ma viene chiamato prima dell'animazione.

Quando l'animazione si interrompe, onPageScrollStateChanged verrà chiamato con lo stato SCROLL_STATE_IDLE.

Quindi è necessario combinare queste due chiamate per ottenere il richiamo della funzione.

Buona fortuna.

private class PageChangeListener implements OnPageChangeListener { 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
    } 

    @Override 
    public void onPageSelected(int position) { 
     isPageChanged = true; 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
     switch (state) { 
     case ViewPager.SCROLL_STATE_IDLE: 
      if (isPageChanged) { 
       updateCurrentPage();//this will be called when animation ends 
       isPageChanged = false; 
      } 
      break; 
     case ViewPager.SCROLL_STATE_DRAGGING: 
      break; 
     case ViewPager.SCROLL_STATE_SETTLING: 
      break; 
     } 
    } 
}