美文网首页Android开发Android知识Android技术知识
适用于作为tab的ViewPager,不能滚动并且没有滚动效果

适用于作为tab的ViewPager,不能滚动并且没有滚动效果

作者: JC_Hou | 来源:发表于2016-09-30 09:49 被阅读153次

    自定义ViewPager继承系统的ViewPager

    • 重写setCurrentItem()方法实现取消滚动效果
    //去除滚动效果
    @Override
    public void setCurrentItem(int item, boolean smoothScroll) {
        super.setCurrentItem(item, smoothScroll);
    }
    @Override
    public void setCurrentItem(int item) {
        super.setCurrentItem(item, false);
    }```
    - 重写时间拦截和touchEvent()实现禁止滚动
    

    //禁止滚动
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (canloop) {//如果可以滚动,不消费事件,继续往下传事件
    return super.onInterceptTouchEvent(ev);
    } else {//如果不可以滚动,事件传给上级的onTouchEvent
    return false;
    }
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
    if (canloop) {//如果可以滚动,不消费事件,往下传
    return super.onTouchEvent(ev);
    } else {//如果不可以滚动,事件传给上级的onTouchEvent
    return false;
    }
    }```

    完整代码
    public class NoScrollViewPager extends ViewPager {
        private boolean canloop = false;
        public NoScrollViewPager(Context context) {
            super(context);
        }
        public NoScrollViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
       //去除滚动效果
        @Override
        public void setCurrentItem(int item, boolean smoothScroll) {
            super.setCurrentItem(item, smoothScroll);
        }
        @Override
        public void setCurrentItem(int item) {
            super.setCurrentItem(item, false);
        }
     
        //禁止滚动
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            if (canloop) {//如果可以滚动,不消费事件,继续往下传事件
                return super.onInterceptTouchEvent(ev);
            } else {//如果不可以滚动,事件传给上级的onTouchEvent
                return false;
            }
        }
        @Override
        public boolean onTouchEvent(MotionEvent ev) {
            if (canloop) {//如果可以滚动,不消费事件,往下传
               return super.onTouchEvent(ev);
            } else {//如果不可以滚动,事件传给上级的onTouchEvent
                return false;
            }
        }```

    相关文章

      网友评论

        本文标题:适用于作为tab的ViewPager,不能滚动并且没有滚动效果

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