美文网首页
ViewPager取消左右滑动,取消切换动画

ViewPager取消左右滑动,取消切换动画

作者: 天青色等Y雨 | 来源:发表于2019-11-26 19:54 被阅读0次
    • \color{#000068}{取消左右滑动,自定义,代码中调用viewPager.setScroll(false)}
    import android.content.Context;
    import android.support.v4.view.ViewPager;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    
    public class NoScrollViewPager extends ViewPager {
    
        private boolean isScroll = false;
    
        public NoScrollViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public NoScrollViewPager(Context context) {
            super(context);
        }
    
        /**
         * 1.dispatchTouchEvent一般情况不做处理
         * ,如果修改了默认的返回值,子孩子都无法收到事件
         */
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            return super.dispatchTouchEvent(ev);   // return true;不行
        }
    
        /**
         * 是否拦截
         * 拦截:会走到自己的onTouchEvent方法里面来
         * 不拦截:事件传递给子孩子
         */
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            // return false;//可行,不拦截事件,
            // return true;//不行,孩子无法处理事件
            //return super.onInterceptTouchEvent(ev);//不行,会有细微移动
            if (isScroll) {
                return super.onInterceptTouchEvent(ev);
            } else {
                return false;
            }
        }
    
        /**
         * 是否消费事件
         * 消费:事件就结束
         * 不消费:往父控件传
         */
        @Override
        public boolean onTouchEvent(MotionEvent ev) {
            //return false;// 可行,不消费,传给父控件
            //return true;// 可行,消费,拦截事件
            //super.onTouchEvent(ev); //不行,
            //虽然onInterceptTouchEvent中拦截了,
            //但是如果viewpage里面子控件不是viewgroup,还是会调用这个方法.
            if (isScroll) {
                return super.onTouchEvent(ev);
            } else {
                return true;// 可行,消费,拦截事件
            }
        }
    
        public void setScroll(boolean scroll) {
            isScroll = scroll;
        }
    }
    
    • \color{#000068}{取消切换动画}
    // setCurrentItem有重载方法,第二个参数就是修改切换动画
    mViewPager.setCurrentItem(position,isAnim);
    

    源地址: https://www.jianshu.com/p/0a76b7f65c94

    相关文章

      网友评论

          本文标题:ViewPager取消左右滑动,取消切换动画

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