2012-08-08 82 views
6

我有一个扩展SimpleOnPageChangeListener的类,并且在我的onPageScrollStateChanged方法中,我希望能够确定用户是通过ViewPager向前还是向后滑动的。即无论他们是从左向右还是从右向左轻扫。Android SimpleOnPageChangeListener - 确定滑动方向

我已经做了大量的搜索,但我找不到任何关于它的东西。我期待onPageScrollStateChanged方法将提供一个参数,说明刷卡的方向,但它不。

@Override 
    public void onPageScrollStateChanged(int state) { 

     // Determine whether the user is swiping forwards or backwards through the ViewPager 
    } 

有没有人有任何想法?

干杯 迈克

回答

2

使用ViewPager.SimpleOnPageChangeListener和保持一个实例变种与当前选项卡POS机,这样你可以找出哪一种方式,它已经偷走。

private final ViewPager.SimpleOnPageChangeListener mPageChangeListener = new ViewPager.SimpleOnPageChangeListener() { 

     @Override 
     public void onPageSelected(final int position) { 
      onTabChanged(mPager.getAdapter(), mCurrentTabPosition, position); 
      mCurrentTabPosition = position; 
     } 
    }; 

protected void onTabChanged(final PagerAdapter adapter, final int oldPosition, final int newPosition) { 
     //Calc if swipe was left to right, or right to left 
     if (oldPosition>newPosition){ 
      // left to right 
     } 
     else{ 
      //right to left 
     } 

    } 
+0

喜Scottyab.Thanks快速回复。我已经实现了这个解决方案,但它只是在页面已经改变之后触发。我想执行一些验证,以阻止用户前进,但允许他们向后移动。有了这个解决方案,页面已经改变了。 – mighele 2012-08-08 16:28:33

0
 int prevPage; 

     @Override 
     public void onPageSelected(int position) { 
      // went back a page 
      if (position-1 == prevPage) { 
       Log.i("Swipped", "Swipped Left"); 
      } 
      // went up a page 
      if (position+1 == prevPage) { 
       Log.i("Swipped", "Swipped Right"); 
      } 
      prevPage = position; 


     }