本文主要解决ViewPager中嵌套ViewPager的滑动分发问题,自定义ViewPager,即BannerViewPager。
阻止子ViewPager中滑动事件不再分发给父ViewPager滑动。
代码如下:
public class BannerViewPager extends ViewPager {
public BannerViewPager(Context context) {
super(context);
}
public BannerViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
super.onInterceptTouchEvent(ev);
return true;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (getChildCount() <= 1) {
super.onTouchEvent(ev);
}
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
if (getParent() != null) {
getParent().requestDisallowInterceptTouchEvent(true); //让事件不再分发
}
break;
case MotionEvent.ACTION_MOVE:
if (getParent() != null) {
getParent().requestDisallowInterceptTouchEvent(true); //让事件不再分发
}
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (getParent() != null) {
getParent().requestDisallowInterceptTouchEvent(true); //让事件不再分发
}
break;
}
super.onTouchEvent(ev);
return true; //让事件不再分发
}
}
if (getParent() != null) { getParent().requestDisallowInterceptTouchEvent(true); //让事件不再分发 }为关键代码。