一步步探索学习Android Touch事件分发传递机制(二)

前言

1. 探究的内容
  • 在上一篇文章《一步步探索学习Android Touch事件分发传递机制(一)》中,已经以ACTION_DOWN事件为例,对Android系统的Touch事件分发传递机制做了探究,并得出了形象好记忆的结论。

  • 这篇文章所探究的问题是与上一篇文章紧密相关的,如果对Android Touch事件分发传递机制还不太了解的同学,建议先去看看上一篇文章《一步步探索学习Android Touch事件分发传递机制(一)》

  • 我们知道,一个操作,比如一个点击事件,是由多个不同TYPE的MOTION_EVENT组成的。for example,点击事件是由一个ACTION_DOWN事件和一个ACTION_UP事件组成的。那么诸如ACTION_UP和ACTION_MOVE事件是不是跟ACTION_DOWN事件一样遵循相同的分发规律呢?

  • 事实上,答案是否定的。 ACTION_UP和ACTION_MOVE事件的分发传递流程与这之前的ACTION_DOWN事件如何传递以及在哪里被消费有密不可分的联系。具体我们下面一步步探索了解。

2. 探究的方法
  • 我们还是继续以上一篇文章《一步步探索学习Android Touch事件分发传递机制(一)》中所写的Demo为例子,一步步打Log,去探究整个事件的传递流程,再用绘图描述他的机制。

  • 当然知其然须知其所以然,对于Android源码的分析,将会在下一篇文章《一步步探索学习Android Touch事件分发传递机制(三)》中分析。


Demo中见分晓

1.Demo代码
**2.打Log,找规律,识机制 **

1. )所有方法(dispatchTouchEvent(); onInterceptTouchEvent(); onTouchEvent() )都return super的情况:**

  • 首先,我们保持所有方法都return super,当然这个我上一篇文章探究过,ACTION_DOWN事件会以类U型的传递路线在View树中分发传递。

  • 那么ACTION_UP和ACTION_MOVE事件呢?这里以ACTION_UP事件为例做探究。(事实上,Action_move事件与Action_up事件是遵循类似规律的。)我对着Demo屏幕中的View做一个点击操作(前面交代过,点击事件是由一个ACTION_DOWN事件和一个ACTION_UP事件组成的)。

  • 打log:


    这里写图片描述

    注:上图中,紫色框内的是点击事件的ACTION_DOWN的分发流程;绿色框中的是点击事件的ACTION_UP事件的分发流程。后面的图同理。

  • 规律:可以看到,ACTION_UP事件并没有按照类U型的结构去在View树传递,而是直接在Activity的onTouchEvent方法中消费掉了。

  • 绘图如下:


    这里写图片描述

2. )ViewGroup2的dispatchTouchEvent() return true的情况:**

  • 然后我们来探究ACTION_DOWN事件在dispatchTouchEvent()中被消费掉的情况下,ACTION_UP事件是怎么传递分发的。

  • 令ViewGroup2的dispatchTouchEvent() return true,打log:

    这里写图片描述

  • 规律:当ACTION_DOWN事件在某一个View或者ViewGroup的dispatchTouchEvent()方法中被消费掉的情况下,对应的ACTION_UP事件也会在此被消费掉,终止传递。

  • 绘制成图:


    这里写图片描述

3. )ViewGroup2的onInterceptTouchEvent()和onTouchEvent() 都 return true的情况:**

  • 也就是让ViewGroup2拦截掉事件,并且由它自己来消费事件。


    这里写图片描述
  • 打log:


    这里写图片描述
  • 规律:可以看到,当ACTION_DOWN事件在某一个View或者ViewGroup的onTouchEvent()方法中被消费掉的情况下,对应的ACTION_UP事件也会在此被消费掉,终止传递。

    但是值得注意的是,这种情况下,ACTION_UP事件是不会再经过拦截器onInterceptTouchEvent()方法了的。

  • 绘图如下:


    这里写图片描述
  • 4.) ViewGroup2的onTouchEvent() return true的情况:**

  • 就是让VIewGroup2的onTouchEvent()方法在接收到View的onTouchEvent()方法传递过来的ACTION_DOWN事件时将其消费掉。看这种情况下,ACTION_UP事件是怎么传递的。

  • 打Log:


    这里写图片描述
  • 规律:可以从Log看出来,当ACTION_DOWN事件被某控件的onToucEvent()方法消费掉,则其对应的ACTION_UP事件只传递到该控件。也就是不会传递到比此控件更深层的控件中去。

  • 绘制图:


    这里写图片描述

总结归纳

  • ACTION_MOVE事件与ACTION_UP事件遵循类似的规律,上面只以ACTION_UP为例子分析探究。

  • ACTION_MOVE事件与ACTION_UP事件的传递分发与其对应之前的ACTION_DOWN事件有紧密联系。

  • 具体的,当ACTION_DOWN事件在dispatchTouchEvent()方法中被消费,则对应的ACTION_MOVE事件与ACTION_UP事件也会从上而下传递到该控件的该方法处被消费掉。

  • 当ACTION_DOWN事件在onTouchEvent()方法中被消费,则对应的ACTION_MOVE事件与ACTION_UP事件只传递到该控件处的onTouchEvent()方法中然后被消费而终止传递。不会经历该控件之下的控件的传递过程。

  • 当所有方法都默认return super,则ACTION_MOVE事件与ACTION_UP事件会在Activity的onTouchEvent()中被消费掉。

注:【转载请注明,问题可提问,喜欢可打赏,博客持续更新,欢迎关注

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容