android requestDisallowInterceptTouchEvent()使用时机问题?

我想了这个问题良久但也想不出答案。我在子控件中的dispatchTouchEvent代码里使用getParent().requestDisallowInterceptTouchEvent(true)这个方法为什么可以“及时”地修改子控件所有父控件的disallowIntercept变量,让其可以不执行自身的onInterceptTouchEvent(ev)方法?

出现问题的情景是:

我是在子控件的dispatchTouchEvent中使用这个方法,这个方法理应在按下事件传递进来到父控件,然后由父控件的onInterceptTouchEvent方法判断是否需要拦截,如果false不需要拦截的时候才会将事件传递下去,如果父控件的onInterceptTouchEvent本来就返回true(一些开源框架拦截了)进行拦截,那么子控件又如何可以在自己的dispatchTouchEvent中使用requestDisallowInterceptTouchEvent(true)方法及时地让父控件不执行自己的onInterceptTouchEvent方法,然后传递事件下去呢??这里很不明白。

阅读 4.4k
1 个回答

父控件要拦截除了ACTION_DOWN以外的其他事件,代码如下:

public boolean onInterceptTouchEvent(MotionEvent event){
    int action = event.getAction();
    if(action == MotionEvent.ACTION_DOWN){
        return false;
    } else {
        return true;
    }
}

这样事件序列默认都来到了子控件,如果子控件不处理时,调用parent.requestDisallowInterceptTouchEvent(false),父控件会处理该事件序列

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题