How to know viewpager is scroll left or right?

前端 未结 13 1819
梦谈多话
梦谈多话 2020-12-13 06:18

I am using ViewPager (support library). I want to know every time the ViewPager change the visible page, it is scrolling left or right.

Please give me a solution. An

相关标签:
13条回答
  • 2020-12-13 07:21

    We can also do this using a Custom Viewpager, which can contain swipeLeft() and swipeRight() methods and its onTouchEvent(MotionEvent event) method can contain ACTION_MOVE and ACTION_CANCEL case.

    // This can be the code if helpful.

    public class SwiperViewPager extends ViewPager {
    
        SwiperListener mSwiperListener;
        private float downX;
        private float downY;
        private boolean isTouchCaptured;
        private float upX1;
        private float upY1;
        private float upX2;
        private float upY2;
    
        public SwiperViewPager(Context context) {
            super(context);
        }
    
        public SwiperViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        private float x1, x2;
        static final int min_distance = 20;
    
        boolean eventSent = false;
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_MOVE: {
                    downX = event.getX();
                    downY = event.getY();
    
                    if (!isTouchCaptured) {
                        upX1 = event.getX();
                        upY1 = event.getY();
                        isTouchCaptured = true;
                    } else {
                        upX2 = event.getX();
                        upY2 = event.getY();
                        float deltaX = upX1 - upX2;
                        float deltaY = upY1 - upY2;
                        //HORIZONTAL SCROLL
                        if (Math.abs(deltaX) > Math.abs(deltaY)) {
                            if (Math.abs(deltaX) > min_distance) {
                                // left or right
                                if (deltaX < 0) {
                                    if(!eventSent && mSwiperListener!=null){
                                        mSwiperListener.onLeftSwipe();
                                        eventSent = true;
                                    }
                                }
                                if (deltaX > 0) {
                                    if(!eventSent && mSwiperListener!=null){
                                        if(mSwiperListener.onRightSwipe()){
                                            eventSent = true;
                                            return false;
                                        }
                                    }
                                }
                            } else {
                                //not long enough swipe...
                            }
                        }
                        //VERTICAL SCROLL
                        else {
                            if (Math.abs(deltaY) > min_distance) {
                                // top or down
                                if (deltaY < 0) {
    
                                }
                                if (deltaY > 0) {
    
                                }
                            } else {
                                //not long enough swipe...
                            }
                        }
                    }
                }
                break;
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:{
                    isTouchCaptured = false;
                    eventSent = false;
                }
    
            }
            return super.onTouchEvent(event);
        }
    
        public void setmSwiperListener(SwiperListener mSwiperListener) {
            this.mSwiperListener = mSwiperListener;
        }
    
        public static interface SwiperListener {
            public boolean onLeftSwipe();
    
            public boolean onRightSwipe();
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题