美文网首页
Touch分发的结论

Touch分发的结论

作者: liaowenhao | 来源:发表于2017-07-23 17:47 被阅读12次

    Touch传递

    1. Touch事件先传递到Activity,然后ViewGroup,再传递到View
    2. Touch分发流程 : Activity.dispatchTouchEvent -> ViewGroup.dispatchTouchEvent ViewGroup.onInterceptTouchEvent -> View.dispatchTouchEvent -> onTouch -> onTouchEvent -> onClick
    3. dispatchTouchEvent()的顺序是由上至下的。onTouchEvent()是从下到上回溯的.前提是事件没有被消费的情况下。

    ViewGroup和View不同

    ViewGroup没有重写onTouchEvent,重写了dispatchTouchEvent,多了onInterceptTouchEvent函数。

    onTouch和onClick优先级

    onTouch()优先级高于onClick(),若onTouch()消耗了事件(通常用return true;表示),则onClick()不执行。onTouchEvent()中在ACTION_UP即手指抬起时处理点击onClick()事件

    Clickable和Enable

    1. enable设置为falseonClick()onTouch()等方法完全屏蔽,onTouchEvent()会被调用,但是View中具体逻辑不执行。
    2. enable可通过设置boolean值改变View的状态。
    3. setClickListener()内部会设置setClickable()true,所以最好setClicable()显式放在setClickListener()后面才会生效。

    dispatchTouchEvent事件分发

    1. dispatchTouchEvent在进行事件分发的时候,通常只有前一个action返回true,才会触发后一个action。对于dispatchTouchEventonTouchEvent,如果View是可点击且Enabletrue,那么onTouchEvent会默认返回true
    2. 注意:Button默认Clickabletrue,所以action事件都会收到,而ImageView默认Clickablefalse,所以当onTouch返回flase时,则不会收到后续action事件。

    感想

    以后尽量看源码,我有这么时间看详解,而且不一定每一篇博客都又详实又能满足我的需要,都能看源码看懂了。看N遍详解,不如看一遍源码...

    参考

    郭霖大神的分析(上)
    郭霖大神的分析(下)
    lfdfhl的分析,读前三篇就够了

    相关文章

      网友评论

          本文标题:Touch分发的结论

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