自定义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;
}
}```
网友评论