getParent().requestDisallowInterceptTouchEvent(true)方法。一旦底层View收到touch的action后调用这个方法,这次touch事件中父层就不能拦截了。
在ViewPager的子View中可以使用requestDisallowInterceptTouchEvent方法,让ViewPager不要拦截子view的事件。
在子View的dispatchTouchEvent方法中调用requestDisallowInterceptTouchEvent。
如下:
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
Log.i("test", "MyViewA dispatchTouchEvent "+EventUtils.getMotion(event));
getParent().requestDisallowInterceptTouchEvent(true);
return super.dispatchTouchEvent(event);
}
例子:我重写了ViewPager,打印touch事件log,自定义一个View,可以消耗点击事件。
例子代码:http://download.csdn.net/detail/fengyun703/9430849
没有加上该方法前点击事件触发如下图:
可以看到ViewPager在move事件后会拦截事件。MyViewA没有收到后来的事件。
加上阻止拦截后,可以看到Viewpager并没有拦截事件了。