Android 事件分发机制总结

写在前面,很高兴又和大家见面了,也有一丝庆幸,庆幸自己坚持了下来,使得又能在博客上与大家分享-。最近工作比较多,然后又去了一家教育机构兼职讲师,可能之后的分享会比较少了。 废话不多说进入正题吧


事件分发机制有多重要,相信众猿们都是知道的,在开发过程当中 布局嵌套 产生了滑动冲突问题,这里涉及到了时间分发机制的知识,在我们写自定义view的时候 百分之90 的情况下都要重写 ontouchevent()方法,所以说事件分发机制与我们的开发息息相关,再加上这一块的知识一直是面试的经典问题,所以总结一下事件分发机制是势在必行的。

本文/视频将会从以下几个小节为顺序来梳理一下android事件分发机制知识,最后通过总结 来解决我们开发当中会碰到过的一个常见的滑动冲突问题。 目录如下:

· 1、基础概念、方法
· 2、事件
  · 2.1、事件是什么,如何产生的
  · 2.2、事件类型
· 3、事件在view之间的传递机制(含示例)
· 4、简单过一遍源码,通过源码再去论证我们的总结
· 5、解决实际问题
  · 5.1、ScrollerView嵌套一个非占满RecyclerView 滑动冲突;

1、基础概念、方法

1、事件是在哪里分发传递的呢?
答: 事件在 Activity、ViewGroup、View 之间进行分发传递,且是当Activity、VIewGroup、view为嵌套关系的时候才会分发;

2、主线方法

1、分发 dispatchTouchEvent
2、拦截 onInterceptTouchEvent
3、消费 onTouchEvent

其中 Activity、view当中 只有 分发 与消费 方法,ViewGroup当中才有 拦截方法;

3、源码当中涉及到的一些比较重要的方法
1、requestDisallowInterceptTouchEvent(boolean ):通知父类是否执行拦截操作 ,如果调用了父类的requestDisallowInterceptTouchEvent(boolean) 方法,且参数传 true 那么父类不会调用自身的拦截方法,false 反之.

2、performClick() 执行点击事件;内部会去调用mOnClickListener.onClick(this)
3、ontouchlistener内部有个ontouch方法,ontouch方法的返回值 决定是否调用onTouchEvent()方法;

2、事件

我们在 Activity、ViewGroup、View当中传递的对象,就是我们的事件。 事件 在代码中 是MotionEvent 里面包含事件的行为 action ,手指的坐标位置等信息。

2.1、事件是什么,如何产生的

手指与屏幕进行交互的时候会产生一系列的对象(其中包括类型、坐标等等信息),这些对象即事件 代码中为 MotionEvent;

2.2、事件类型

2.2.1 、常用的 事件类型有以下几个:
1、MotionEvent.ACTION_DOWN:按下View(所有事件的开始)
2、MotionEvent.ACTION_MOVE:滑动View
3、MotionEvent.ACTION_CANCEL:非人为原因结束本次事件
4、MotionEvent.ACTION_UP:抬起View(与DOWN对应)

2.2.2 、那么一根手指 从 接触屏幕-滑动-离开屏幕 会产生哪些时间呢?

手指按下 产生一个 ACTION_DOWN 行为的 事件;
手指滑动会产生多个 ACTION_MOVE行为的事件;
手指离开屏幕会产生一个 ACTION_UP行为的事件;

3、事件在view之间的传递机制(含示例)

示例界面是这样的

事件分发示例图

示例代码 :地址 https://github.com/LidongWen/EventSummary
视频地址放在最后 ↓↓↓

视频中画的图

android事件分发机制.png

4、简单过一遍源码,通过源码再去论证我们的总结

视频地址放在最后 ↓↓↓ , 也可以看我的 7.0源码解读——事件分发机制

5、解决实际问题

5.1、ScrollerView嵌套一个非占满RecyclerView 滑动冲突;

视频地址放在最后 ↓↓↓ ,先来看效果:

来张镇楼图!


镇楼图

代码地址:https://github.com/LidongWen/EventSummary
文章相应视频:http://pan.baidu.com/s/1pL4sJ1L 密码:7ztl;


希望我的文章不会误导在观看的你,如果有异议的地方欢迎讨论和指正。
如果能给观看的你带来收获,那就是最好不过了。

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

推荐阅读更多精彩内容