我想了这个问题良久但也想不出答案。我在子控件中的dispatchTouchEvent代码里使用getParent().requestDisallowInterceptTouchEvent(true)这个方法为什么可以“及时”地修改子控件所有父控件的disallowIntercept变量,让其可以不执行自身的onInterceptTouchEvent(ev)方法?
出现问题的情景是:
我是在子控件的dispatchTouchEvent中使用这个方法,这个方法理应在按下事件传递进来到父控件,然后由父控件的onInterceptTouchEvent方法判断是否需要拦截,如果false不需要拦截的时候才会将事件传递下去,如果父控件的onInterceptTouchEvent本来就返回true(一些开源框架拦截了)进行拦截,那么子控件又如何可以在自己的dispatchTouchEvent中使用requestDisallowInterceptTouchEvent(true)方法及时地让父控件不执行自己的onInterceptTouchEvent方法,然后传递事件下去呢??这里很不明白。
父控件要拦截除了ACTION_DOWN以外的其他事件,代码如下:
这样事件序列默认都来到了子控件,如果子控件不处理时,调用parent.requestDisallowInterceptTouchEvent(false),父控件会处理该事件序列