自定義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;
}
}```