0

我用slidingMenu(从jfeinstein10)在我的应用程序,我创建了从SlidingFragmentActivity延伸的新的活动,在活动我用ViewPager从support.v4显示一些片段,用gtRfnkN在问题ViewPager inside ViewPager如何确定TouchEvent当我使用SlidingMenu/ViewPager和ListView?

public class GalleryViewPager extends ViewPager { 

/** the last x position */ 
private float lastX; 

/** if the first swipe was from left to right (->), dont listen to swipes from the right */ 
private boolean slidingLeft; 

/** if the first swipe was from right to left (<-), dont listen to swipes from the left */ 
private boolean slidingRight; 

public GalleryViewPager(final Context context, final AttributeSet attrs) { 
    super(context, attrs); 
} 

public GalleryViewPager(final Context context) { 
    super(context); 
} 

@Override 
public boolean onTouchEvent(final MotionEvent ev) { 
    final int action = ev.getAction(); 
    switch (action) { 
     case MotionEvent.ACTION_DOWN: 

      // Disallow parent ViewPager to intercept touch events. 
      this.getParent().requestDisallowInterceptTouchEvent(true); 

      // save the current x position 
      this.lastX = ev.getX(); 

      break; 

     case MotionEvent.ACTION_UP: 
      // Allow parent ViewPager to intercept touch events. 
      this.getParent().requestDisallowInterceptTouchEvent(false); 

      // save the current x position 
      this.lastX = ev.getX(); 

      // reset swipe actions 
      this.slidingLeft = false; 
      this.slidingRight = false; 

      break; 

     case MotionEvent.ACTION_MOVE: 
      /* 
      * if this is the first item, scrolling from left to 
      * right should navigate in the surrounding ViewPager 
      */ 
      if (this.getCurrentItem() == 0) { 
       // swiping from left to right (->)? 
       if (this.lastX <= ev.getX() && !this.slidingRight) { 
        // make the parent touch interception active -> parent pager can swipe 
        this.getParent().requestDisallowInterceptTouchEvent(false); 
       } else { 
        /* 
        * if the first swipe was from right to left, dont listen to swipes 
        * from left to right. this fixes glitches where the user first swipes 
        * right, then left and the scrolling state gets reset 
        */ 
        this.slidingRight = true; 

        // save the current x position 
        this.lastX = ev.getX(); 
        this.getParent().requestDisallowInterceptTouchEvent(true); 
       } 
      } else 
      /* 
      * if this is the last item, scrolling from right to 
      * left should navigate in the surrounding ViewPager 
      */ 
      if (this.getCurrentItem() == this.getAdapter().getCount() - 1) { 
       // swiping from right to left (<-)? 
       if (this.lastX >= ev.getX() && !this.slidingLeft) { 
        // make the parent touch interception active -> parent pager can swipe 
        this.getParent().requestDisallowInterceptTouchEvent(false); 
       } else { 
        /* 
        * if the first swipe was from left to right, dont listen to swipes 
        * from right to left. this fixes glitches where the user first swipes 
        * left, then right and the scrolling state gets reset 
        */ 
        this.slidingLeft = true; 

        // save the current x position 
        this.lastX = ev.getX(); 
        this.getParent().requestDisallowInterceptTouchEvent(true); 
       } 
      } 

      break; 
    } 

    super.onTouchEvent(ev); 
    return true; 
} 

} 
回答方式

但是,当我把ListView放在ViewPager的Fragment中时,当我将ListView水平移动时,ViewPager保持不动,滑动滑出。你能告诉我如何解决这个问题吗?非常感谢。

+0

看到这个http://stackoverflow.com/questions/13895149/sliding-menu-locks-touch-事件上视图 – Shruti

回答

相关问题