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

自定义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;
        }
    }```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容