5

From the code here, I have a ViewPager that sets an adapter. Is there any way to disable the scrolling animation so that it just "jumps" to the new page when I swipe? I'm not looking to disable the whole scrolling function in onTouchEvent and onInterceptTouchEvent, just the sliding animation.

mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager()); // Set up the ViewPager with the sections adapter. mViewPager = (CustomViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mSectionsPagerAdapter); 

4 Answers 4

17

I do not know if there is a clean solution. But you can use a trick and undo the standard page transformer with another transformer. The NoPageTransformer would look like this:

private static class NoPageTransformer implements ViewPager.PageTransformer { public void transformPage(View view, float position) { if (position < 0) { view.setScrollX((int)((float)(view.getWidth()) * position)); } else if (position > 0) { view.setScrollX(-(int) ((float) (view.getWidth()) * -position)); } else { view.setScrollX(0); } } } 

To add it to your ViewPager, call:

mViewPager.setPageTransformer(false, new NoPageTransformer()); 

Will work in SDK version 16 and above.

Sign up to request clarification or add additional context in comments.

1 Comment

Great, this is perfect solution, Could you please help for vertical viewpage.
2

Kotlin:

viewpager.setPageTransformer(false, FadePageTransformer()) inner class FadePageTransformer : ViewPager.PageTransformer { override fun transformPage(view: View, position: Float) { view.translationX = view.width * -position if (position <= -1.0f || position >= 1.0f) { view.alpha = 0.0f view.setVisibility(View.GONE); } else if (position == 0.0f) { view.alpha = 1.0f view.setVisibility(View.VISIBLE); } else { // position is between -1.0F & 0.0F OR 0.0F & 1.0F view.alpha = 1.0f - Math.abs(position) view.setVisibility(View.GONE); } } } 

1 Comment

In else block you should set View.VISIBLE instead
0

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); } ... } 

Comments

0
viewPager.setPageTransformer(false, new NoPageTransformer()); 

private static class NoPageTransformer implements ViewPager.PageTransformer { public void transformPage(@NonNull View view, float position) { view.setTranslationX(view.getWidth() * -position); if (position <= -1.0f || position >= 1.0f) { view.setVisibility(View.GONE); } else if (position == 0.0f) { view.setVisibility(View.VISIBLE); } else { view.setVisibility(View.GONE); } } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.