有需求让禁止viewpager滑动了,找了几个例子,踩了点坑,记录下。
第一种方式 :重写viewpager 里面的socrllto 方法,
@Override
public void scrollTo(int x, int y) {
if (isCanScroll) {
super.scrollTo(x, y);
}
}
但是如果仅仅设置了这个的话,那么代码中 setCurrentItem() 方法也失效了,正确的方式是设置viewpager 的OnPageChangeListener ,在这几个方法中动态的设置isCanScroll的值,达到你的目的,这种方式比较灵活,当然,想不明白的话,也是废的。。。
第二种方式:重写 onTouchEvent onInterceptTouchEvent,
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
if (isNoTouch) {
return false;
}
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException e) {
e.printStackTrace();
return false;
}
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (isNoTouch) {
return false;
}
return super.onTouchEvent(ev);
}
这种方式是不处理事件,就是说滑动的事件我,不处理了,但是界面的点击事件还是有效的,,注意俩个方法都要返回false啊,这个很重要,我不拦截,也不处理,
当然如果你的需求是让viewpager不滑动,且页面中的点击事件也不处理的话,那就返回true, 我拦截下来,但是不处理