美文网首页高级UI
ViewPager不可滑动(两种)

ViewPager不可滑动(两种)

作者: 玖玖君 | 来源:发表于2019-07-30 20:55 被阅读1次

    现在大部分的APP都都大致分为好几个模块,这就用到了viewpager+fragment来实现这样的效果,下面咱们就一起来实现一下这样的效果;

    第一种(无BUG)

    1、在项目里面添加工具类:

     
    public class CustomViewPager extends ViewPager {
    
        private boolean isCanScroll = true;
    
        public ScrollableViewPager(Context context) {
            super(context);
        }
    
        public ScrollableViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
     
        /**
         * 设置其是否能滑动换页
         * @param isCanScroll false 不能换页, true 可以滑动换页
         */
        
        public void setScanScroll(boolean isCanScroll) {
            this.isCanScroll = isCanScroll;
        }
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            return isCanScroll && super.onInterceptTouchEvent(ev);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent ev) {
            return isCanScroll && super.onTouchEvent(ev);
    
        }
        @Override
        public void scrollTo(int x, int y) {
            super.scrollTo(x, y);
        }
     
    }
     
    

    2、在布局里面将viewpager控件替换成工具类的类路径名

    布局里面

    拿类的类名,其实想拿类路径名也简单,右键想要拿类路径名的类


    获取路径名

    就是这个,点击之后就已经复制了类路径名

    3、最后一步就是在用到的类里面添加一行代码实现fragment的滑动禁止

    设置

    禁止滑动就这么简单,添加一个工具类加一行代码完成
    这个实现之后会发现确实不能滑动了,但是当点击按钮切换页面的时候还是会有滑动的效果,如何去掉这种滑动的效果呢?换另外一个工具类

    /**

    • 禁止viewpager页面的滑动的效果
     * Created by Administrator on 2017/6/1.
     */
    
    import android.content.Context;
    import android.support.v4.view.ViewPager;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    
    /**
     * 手动控制viewpager是否可以左右滑动
     * 去除滑动动画
     * setNoScroll(boolean noScroll)
     *
     * @author ex-panyong
     */
    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);
        }
    
        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); */
            switch(arg0.getAction()){
            }
    
    
            return !noScroll && super.onTouchEvent(arg0);
        }
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent arg0) {
            return !noScroll && super.onInterceptTouchEvent(arg0);
        }
    
        @Override
        public void setCurrentItem(int item, boolean smoothScroll) {
            super.setCurrentItem(item, smoothScroll);
        }
    
        @Override
        public void setCurrentItem(int item) {
            //false 去除滚动效果
            super.setCurrentItem(item,false);
        }
    
    }
    
    
     调用这个工具类之后不仅页面不能滑动,而且当点击按钮切换页面的时候也没有滑动的效果,按需求选择到底使用哪个工具类就行了
    
    

    第二种(有时候不好用)

       mVp .setOnTouchListener( new View.OnTouchListener ()
            {
                @Override
                public boolean onTouch(View v, MotionEvent event)
                {
                    return true;  //修改为true
                }
    
            });
    

    相关文章

      网友评论

        本文标题:ViewPager不可滑动(两种)

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