Disabling animation in ViewPager

后端 未结 4 1615
猫巷女王i
猫巷女王i 2020-12-04 23:09

I\'d like to disable all the animations for the transitions in my custom ViewPager. This view pager contains four tabs -and each tab loads a Fragment

4条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-04 23:40

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

提交回复
热议问题