美文网首页
事件分发机制

事件分发机制

作者: 笔墨Android | 来源:发表于2018-03-28 18:58 被阅读0次

    XSize的主页

    android事件分发的理解:

    本文知识点:

    • 理解事件分发的流程;
    • 知道事件分发的调用顺序;
    • 相应方法的执行流程。

    首先事件分发流程是在Activity、ViewGroup、View三者之间进行传递的,但是这里你首先要理解分发的几个相应发方法

    • Activity
      • dispatchTouchEvent
      • onTouchEvent
    • ViewGroup
      • dispatchTouchEvent
      • onTouchEvent
      • onInterceptTouchEvent
    • View
      • dispatchTouchEvent
      • onTouchEvent

    其次应该明白一个概念,所有的事件分发都是基础相应的手势进行处理的,也就是说从你按下屏幕的那一刻开始的,然后直接传递到相应页面的Activity上,然后就有了下面这张比较潦草的图片了...

    andorid事件分发流程

    图画的不怎么样,大家将就看吧!能明白就好

    首先先理解一下上面的图片含义吧!

    1.Activity层的内容:

    首先事件会传递到相应Activity的dispathTouchEvent方法中,如果你想要在这里处理相应的点击事件返回true,false的话,之后的ViewGroup就不能收到相应的时间了,事件到此就终止了!但如果你要是不去重写这个方法的话,才会将事件传递到相应的ViewGroup。

    2.ViewGroup层的内容

    因为ViewGroup有相应的onInterceptTouchEvent方法,所以这里略显的复杂一点,也就是传说中的事件分发了!首先事件会传递到相应的dispathTouchEvent方法中

    • dispatchTouchEvent 这里分以下几种情况:
      • 返回 fasle -> 说明你不去处理这次事件,那么没办法,只有交给上层Activity的onTouch进行处理
      • 返回 true -> 说明你消费了这次事件,事件到此终止,不会继续向下传递了
      • 什么也不做 super.dispatchTouchEvent(ev) -> 那么就传递到相应的onInterceptTouchEvent进行处理
    • onInterceptTouchEvent(分发相应的事件)这里也分为以下几种情况:
      • 返回true -> 交给自己的onTouch进行处理,就是说我要处理这个事件,也相当于消费了本次事件,事件就此终止;
      • 返回false或者super.onInterceptTouchEvent(ev) -> 我不进行分发了,继续向下传递吧!也就交给了相应的子View进行处理了!

    3.View层的内容

    因为View层没有相应的onInterceptTouchEvent方法,所以这里和Activity没有什么太大的区别首先也是传递到相应的dispathTouchEvent方法中

    • dispathTouchEvent这里分以下几种情况:
      • true -> 代表View消费了相应的事件,事件就此终止。
      • false-> 我也不想去处理,这个时候只能是ViewGroup的onTouch去处理了
      • super.onTouchEvent(event) ->还是交给自己的Touch去处理吧!

    4.右侧的onTouch侧的内容

    其实所有的onTouch处理的办法都类似,如果自己不想处理(返回false或者返回super.onTouchEvent(event))就直接交给上一层去处理,如果想处理的话(返回true)那么事件就在相应的onTouch中被消费了

    关于事件分发的整体流程就是这样的,所有的内容我都是log进行测试的,如果有什么不对的希望大家指出,我会马上更正。

    相关文章

      网友评论

          本文标题:事件分发机制

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