美文网首页
Android-ViewPager禁止左滑或者右滑

Android-ViewPager禁止左滑或者右滑

作者: 因为我的心 | 来源:发表于2020-10-20 14:10 被阅读0次

    一、前言:

    因为项目需求,要做一个滑动页面上课,而且滑动到当前页,下一页没有人,就要禁止左滑到下一个页面,百度了下,大多是禁止左右双向滑动,满足不了效果,继续百度了解了下 触摸事件的分发,我决定自己写一个试试,结果效果很好。

    代码如下:

    public class CanotSlidingViewpager extends ViewPager {
    
        /**
         * 上一次x坐标
         */
        private float beforeX;
        private boolean isCanScroll = true;
    
        public CanotSlidingViewpager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public CanotSlidingViewpager(Context context) {
            super(context);
        }
    
        
    
        //-----禁止左滑-------左滑:上一次坐标 > 当前坐标
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            if (isCanScroll) {
                return super.dispatchTouchEvent(ev);
            } else {
                switch (ev.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        //按下如果‘仅’作为‘上次坐标’,不妥,因为可能存在左滑,motionValue大于0的情况(来回滑,只要停止坐标在按下坐标的右边,左滑仍然能滑过去)
                        beforeX = ev.getX();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        float motionValue = ev.getX() - beforeX;
                        if (motionValue < 0) {//禁止左滑
                            return true;
                        }
                        beforeX = ev.getX();
                        //手指移动时,再把当前的坐标作为下一次的‘上次坐标’,解决上述问题
                        break;
                    default:
                        break;
                }
                return super.dispatchTouchEvent(ev);
            }
    
        }
    
    
        //----------禁止左右滑动------------------
    //    @Override
    //    public boolean onTouchEvent(MotionEvent ev) {
    //        if (isCanScroll) {
    //            return super.onTouchEvent(ev);
    //        } else {
    //            return false;
    //        }
    //
    //    }
    //
    //    @Override
    //    public boolean onInterceptTouchEvent(MotionEvent arg0) {
    //        // TODO Auto-generated method stub
    //        if (isCanScroll) {
    //            return super.onInterceptTouchEvent(arg0);
    //        } else {
    //            return false;
    //        }
    //
    //    }
        
    
        public boolean isScrollble() {
            return isCanScroll;
        }
    
        /**
         * 设置 是否可以滑动
         * true支持滑动,false禁止滑动
         * @param isCanScroll
         */
        public void setScrollble(boolean isCanScroll) {
            this.isCanScroll = isCanScroll;
        }
    
    }
    

    注意:
    右滑就把motionValue判断改成大于0

    if (motionValue > 0)
    

    参考:https://blog.csdn.net/u013372185/article/details/46559397

    相关文章

      网友评论

          本文标题:Android-ViewPager禁止左滑或者右滑

          本文链接:https://www.haomeiwen.com/subject/kyldmktx.html