the accepted answer still have a swipe animation I was searching for disabling the swipe animation even swipe by the user here is my implementation
1-Override Viewpager method onInterceptTouchEvent and onTouchEvent
2- create your own GestureDetector
3- detect the swipe gesture and use the setCurrentItem(item, false)
ViewPager
public class ViewPagerNoSwipe extends ViewPager { private final GestureDetector gestureDetector; private OnSwipeListener mOnSwipeListener; public void setOnSwipeListener(OnSwipeListener onSwipeListener) { mOnSwipeListener = onSwipeListener; } public ViewPagerNoSwipe(@NonNull Context context) { super(context); gestureDetector = new GestureDetector(context, new GestureListener()); } public ViewPagerNoSwipe(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); gestureDetector = new GestureDetector(context, new GestureListener()); } @Override public boolean onTouchEvent(MotionEvent ev) { return true; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { gestureDetector.onTouchEvent(ev); return false; } public class GestureListener extends GestureDetector.SimpleOnGestureListener { private static final int SWIPE_THRESHOLD = 100; private static final int SWIPE_VELOCITY_THRESHOLD = 100; @Override public boolean onDown(MotionEvent e) { return true; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { boolean result = false; try { float diffY = e2.getY() - e1.getY(); float diffX = e2.getX() - e1.getX(); if (Math.abs(diffX) > Math.abs(diffY)) { if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { if (diffX > 0) { if(mOnSwipeListener!=null) mOnSwipeListener.onSwipeRight(); } else { if(mOnSwipeListener!=null) mOnSwipeListener.onSwipeLeft(); } result = true; } } else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { if (diffY > 0) { if(mOnSwipeListener!=null) mOnSwipeListener.onSwipeBottom(); } else { if(mOnSwipeListener!=null) mOnSwipeListener.onSwipeTop(); } result = true; } } catch (Exception exception) { exception.printStackTrace(); } return result; } } public interface OnSwipeListener { void onSwipeRight(); void onSwipeLeft(); void onSwipeTop(); void onSwipeBottom(); } }
the when you are set up the ViewPager set the swipeListener
postsPager.setOnSwipeListener(new ViewPagerNoSwipe.OnSwipeListener() { @Override public void onSwipeRight() { postsPager.setCurrentItem(postsPager.getCurrentItem() + 1,false); } @Override public void onSwipeLeft() { postsPager.setCurrentItem(postsPager.getCurrentItem() - 1, false); } ... }