美文网首页
Android触摸事件传递机制

Android触摸事件传递机制

作者: HarmonyOS开发者 | 来源:发表于2017-02-20 10:40 被阅读0次

关于Touch事件传递机制网上很多说的都不够清晰(也可能是我没找到,哈哈),今天就简单写一下,主要就看流程图就成了

流程图:

Touch事件传递机制.png

说明:

当手指触摸屏幕时, 首先触发顶层ViewGroup的dispatchTouchEvent方法,在此方法中会先调用onInterceptTouchEvent方法:

  • 如果onInterceptTouchEvent返回true,则不再向下分发事件,并调用ViewGroup的父类View的dispatchTouchEvent方法,查看源码得知会先执行onTouchListener的onTouch方法,如果此方法返回false,则会调用onTouchEvent方法,如果返回true则直接返回;
  • 如果onInterceptTouchEvent返回false,则事件向下分发,调用子View的dispatchTouchEvent方法; 如果子View不是ViewGroup,在此方法中实际执行的是onTouchListener的onTouch方法,如果onTouch方法返回true则直接返回不再执行子View的onTouchEvent方法(包括onClick等),且后续的MOVE和UP事件都由子View的onTouch方法消费掉,且不再向上传递;如果onTouch方法返回false,则会调用子View的onTouchEvent方法,此时会调用onClick方法等,如果onTouchEvent返回true,则后续的MOVE和UP事件都由子View的onTouchEvent方法消费掉,当然也会走onTouch方法,如果onTouchEvent返回false,则事件向上传递,且后续事件不再传递给子View;如果子View是一个ViewGroup则按以上说明重新走一遍;
  • 如果所有的子View都返回false,则后续的所有事件都由顶层ViewGroup执行消费掉;
注:以上说的仅是ACTION_DOWN事件,因为android就是通过判断ACTION_DOWN事件执行时的返回值来决定谁来响应后续的事件;且在多点触摸中,接受第一个手指Touch事件的View,也会接受其它后续手指的触摸事件;

相关文章

网友评论

      本文标题:Android触摸事件传递机制

      本文链接:https://www.haomeiwen.com/subject/sapswttx.html