android|android 事件拦截

主要思想是自定义被拦截的view,重写dispatchTouchEvent这个方法,在这个方法里写拦截的规则。
例子请看下面的

public class InterceptViewPager extends ViewPager {
private floatdownX;
private floatdownY;
【android|android 事件拦截】public InterceptViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public InterceptViewPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// 申请父控件不拦截事件
getParent().requestDisallowInterceptTouchEvent(true);
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = ev.getX();
downY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
System.out.println("movew...........");
float moveX = ev.getX();
float moveY = ev.getY();
// 是否是横向滑动
float dx = moveX - downX;
float dy = moveY - downY;
if (Math.abs(dx) < Math.abs(dy)) {
// 纵向滑动
getParent().requestDisallowInterceptTouchEvent(false); // 拦截
} else {
// 申请父控件不拦截事件 条件
// 1. 如果是第一张图片,从左往右滑动 父类拦截我的事件
if (getCurrentItem() == 0 && dx > 0) {
getParent().requestDisallowInterceptTouchEvent(false); // 拦截
} else if (getCurrentItem() == getAdapter().getCount() - 1
&& dx < 0) {
// 2. 最后一张图片 从右往左滑动 父类拦截我的事件
getParent().requestDisallowInterceptTouchEvent(false); // 拦截
} else {
// 3. 不拦截事件
getParent().requestDisallowInterceptTouchEvent(true); // 不拦截
}
}
break;
default:
break;
}
return super.dispatchTouchEvent(ev);
}
}

    推荐阅读