看到网上有千篇一律的解决方法,我亲测总结了两种方法
public class TestViewpager extends ViewPager {
public boolean isCanScroll=true;
public TestViewpager(Context context) {
this(context,null);
}
public TestViewpager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setCanScroll(boolean isCanScroll){
this.isCanScroll=isCanScroll;
}
//第一种
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(!isCanScroll){
return false;
}
return super.onTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if(!isCanScroll){
return false;
}
return super.onInterceptTouchEvent(event);
}
//第二种
@Override
public void scrollTo(int x, int y) {
if(isCanScroll){
super.scrollTo(x, y);
}
}}
- 截断分发事件,这种方法适合viewpager嵌套使用
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(!isCanScroll){
return false;
}
return super.onTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if(!isCanScroll){
return false;
}
return super.onInterceptTouchEvent(event);
}
返回false说明viewpager不消费该事件,当然无法执行了
2.ViewPager源码里实现就是靠scrollTo,解决它就ok了
public void scrollTo(int x, int y) {
if(isCanScroll){
super.scrollTo(x, y);
}
}}```