ViewPager禁止滑动

作者: 唠嗑008 | 来源:发表于2017-03-24 10:34 被阅读218次
    一、简介:

    有时项目中会有这样的需求:在ViewPager的里面再嵌入ViewPager,那么就有冲突了,简单粗暴的方法就是直接把一个ViewPager禁止滑动。
    注意:禁止滑动的同时不能禁止 setCurrentItem 方法。
    实现思路:重写ViewPager,覆盖 onTouchEvent 和 onInterceptTouchEvent 方法,使其返回false,这样就等于禁止了ViewPager上的滑动事件。

    二、NoScrollViewPager
    /**
     * "禁止ViewPager滑动"的辅助类
     */
    
    public class NoScrollViewPager extends ViewPager {
    
        private boolean noScroll = false;
    
        public NoScrollViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
            // TODO Auto-generated constructor stub
        }
    
        public NoScrollViewPager(Context context) {
            super(context);
        }
    
    
        /**
         * 供外部调用的方法:设置是否可以滑动
         * @param noScroll true:表示禁止滑动,false:表示可以滑动
         */
        public void setNoScroll(boolean noScroll) {
            this.noScroll = noScroll;
        }
    
        @Override
        public void scrollTo(int x, int y) {
            super.scrollTo(x, y);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent arg0) {
            /* return false;//super.onTouchEvent(arg0); */
            if (noScroll)
                return false;
            else
                return super.onTouchEvent(arg0);
        }
    
        /**
         * 返回true:表示拦截
         * 返回false:表示不拦截
         * @param arg0
         * @return
         */
        @Override
        public boolean onInterceptTouchEvent(MotionEvent arg0) {
            if (noScroll)
                return false;
            else
                return super.onInterceptTouchEvent(arg0);
        }
    
        @Override
        public void setCurrentItem(int item, boolean smoothScroll) {
            super.setCurrentItem(item, smoothScroll);
        }
    
        @Override
        public void setCurrentItem(int item) {
            super.setCurrentItem(item);
        }
    }
    
    

    如果你想更简单一点,这样,简单,粗暴

    /**
     * 不可以滑动,但是可以setCurrentItem的ViewPager。
     */
    public class NoScrollViewPager extends ViewPager {
        public NoScrollViewPager(Context context) {
            super(context);
        }
    
        public NoScrollViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent arg0) {
            return false;
        }
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent arg0) {
            return false;
        }
    }
    

    相关文章

      网友评论

        本文标题:ViewPager禁止滑动

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