android 扣扣事件分发机制 dispatchTouchEvent onInterceptTouchEvent onTouchEvent

dispatchTouchEvent : 分发事件
onInterceptTouchEvent : 拦截事件
onTouchEvent : 消费事件

这个是三个方法的最基本的作用

image.png

网上的图 。 https://zhuanlan.zhihu.com/p/27608989

从这个图 我们可以看到一个清晰的结构。

首先说一下 activity和view 为什么没有拦截onInterceptTouchEvent 因为这是在对顶和最下面的结构, 加上这个方法完全没有意义,

至于这几个方法的顺序问题 我们也来通过几个图 来看一下


image.png

我们可以看出来什么。viewgroup是从dispatchTouchEvent 开始 并且以他结束。中介掺杂着onInterceptTouchEvent 拦截方法。

image.png

这是当 viewgroup 当中有view的时候 顺序情况

我们可以看出来的执行顺序。 就是从外层到里层去判断。

1 首先vewgroup是不是要消费这个事件。
2 vewgroup是不是拦截这个事件。
上面的两个如果都是true的话 那么这个事件都不会执行到子view的方法。
上面的图 子view 也没有消费掉这个事件onTouchEvent 返回的false,这个事件没有消费出去,也就是没有派发出去,那么子View的dispatchTouchEvent()方法返回false,把这个事件交还给上一层的ViewGroup。ViewGroup发现这个事件没有子View消费,那么就自己动手吧!将事件传给自己的onTouchEvent()方法消费。可是ViewGroup也没有消费,那么onTouchEvent()方法只能是再返回false了。同理,ViewGroup自己没有消费事件,因此他的dispatchTouchEvent()方法也返回了false。

说直白点。如果里外有好几层的话。 那么,分发机制都是从最外层开始。逐层往里面去循环。当你哪一层需要对这个事件去有反应的话。 那么就在去消费这个事件,dispatchTouchEvent 返回的true就可以。 当然ontouchevent 也肯定返回的是true。

image.png

View明确表示要消费这个事件序列,因此从ACTION_DOWN开始的所有事件就都交给他消费了。所以子View的onTouchEvent的返回值为true,表示自己需要消费这个事件,然后他的dispatchTouchEvent也返回了true,表示这一事件被自己分发了。既然自己的子View消费了事件,ViewGroup就认为这一事件是被自己分发了,因此他的dispatchTouchEvent也就返回了true。

然后在来看一个表

来源https://www.cnblogs.com/aademeng/articles/6551337.html

image.png

dispathtouchevent 方法 返回true的时候 都是代表当前view 处理掉这个事件。
所以我们思考一下。 当我们有好几层的时候。然后出现焦点混乱 是什么造成的?
明明应该滑动的不滑动。不该滑动的确实滑动了。 这个情况的出现就是焦点混乱。dispatch。。。方法就不应该是true。 你也可以理解成为 你想要你里面的结构 响应一些操作的话。 那么外面你自己定义的一个groupview dispath..和拦截方法。返回的都应该是false, 不能是true。要不下面的方法 都不会响应。

image.png

上面的表格。这个我觉得是有点问题的

image.png

你的dispatchTouchEvent 方法 首先不知道是第几层。 有可能是activity 有可以是viewgroup 还有可能是view。 不是对底层的话。 都是有可能 会是向下传递的 , 因为她是返回的false。最下层的话。那么返回的就是父控件

大家 有没有这么想的。。 这样就错了。 我也这么想过 - -

还记着这个图吗,dispatchTouchEvent 这个是两部分。start 开始 和最后的return 这个是一个过程。 当他返回的时候,可能是要返回的到上面!!!

什么 不明白?

你可以理解成为一个{

return 这个才是返回值 而在他们的上面 都是一个过程的第一层的dispatchTouchEvent 不拦截 不消费,那么就会循环到childview里面去做判断。 当里面的dispatchTouchEvent 返回true的时候说明里面的{ } 搞定了 然后要给他的上层了 也就是父类,
}

所以 这几个方法 还是要区分的作用的 在说大白话一点

dispatchTouchEvent 这个值 在我们最外层的时候 返回的是 true的话。 我们里面的子view还会不会执行。 会的(如果你不拦截的话。 所以 如果 你不想子view执行的话 那么你返回值 要是true 还要拦截。这样才不会进入到子view。)

https://www.cnblogs.com/aademeng/articles/6551337.html 很棒

https://www.jianshu.com/p/b61a49e0279f

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

推荐阅读更多精彩内容