事件分发机制

原创 2018年04月16日 19:41:54
1.1 事件分发的对象是谁?
点击事件(Touch事件)


·定义 
当用户触摸屏幕时(View 或 ViewGroup派生的控件),将产生点击事件(Touch事件)


Touch事件的相关细节(发生触摸的位置、时间等)被封装成MotionEvent对象

·事件类型(4种)


事件类型 具体动作
MotionEvent.ACTION_DOWN 按下View(所有事件的开始)
MotionEvent.ACTION_UP 抬起View(与DOWN对应)
MotionEvent.ACTION_MOVE 滑动View
MotionEvent.ACTION_CANCEL 结束事件(非人为原因)
·从手指接触屏幕 至 手指离开屏幕,这个过程产生的一系列事件




1.2 事件分发的本质


答:将点击事件(MotionEvent)传递到某个具体的View处理的整个过程


1.3 事件在哪些对象之间进行传递?
答:Activity、ViewGroup、View


1.4 事件分发的顺序
即 事件传递的顺序:Activity -> ViewGroup -> View
1.5 事件分发过程由哪些方法协作完成?
答:dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()


dispatchTouchEvent:
作用:分发(传递)点击事件
   调用时刻:当点击事件能够传递给当前View时,该方法就会被调用。


onInterceptTouchEvent:
作用:判断是否拦截了某个事件
   调用时刻:在ViewGroup的dispatchTouchEvent()内部调用。


onTouchEvent():
作用:处理点击事件
   调用时刻:在dispatchTouchEvent内部调用。




点击Button时,执行Button.onClick(),但ViewGroupLayout注册的onTouch()不会执行
只有点击空白区域时,才会执行ViewGroupLayout的onTouch()
结论:Button的onClick()将事件消费掉了,因此事件不会再继续向下传递。

事件分发机制原理

之前讲解了很多与View绘图相关的知识,你可以在 安卓自定义View教程目录 中查看到这些文章,如果你理解了这些文章,那么至少2D绘图部分不是难题了,大部分的需求都能满足,但是关于View还有很多知识...
  • qianqianyihao
  • qianqianyihao
  • 2016-10-11 14:12:39
  • 2096

浅谈Android事件分发机制

在Android实际开发过程中经常会遇到View之间的滑动冲突,如ScrollView与Listview、RecyclerView之间的嵌套使用。在很好的解决此类问题之前,我们应深入的了解Androi...
  • salmon_zhang
  • salmon_zhang
  • 2017-08-06 09:44:24
  • 382

完全理解android事件分发机制

前言之前笔者其实已经写过事件分发机制的文章:快速理解android事件传递拦截机制概念 但是,现在看来其实更像是一篇知识概括,多处可能未讲清楚,于是打算重写事件分发,用一篇文章大致讲清楚。 首先,...
  • Double2hao
  • Double2hao
  • 2017-01-12 10:04:06
  • 900

【Android面试笔记】(一)事件分发机制

首先我们必须了解三个方法 1.dispatchTouchEvent 2interceptTouchEvent      3.TouchEvent 下面先介绍第一个:dispatchTouchEvent...
  • u011669081
  • u011669081
  • 2015-10-18 18:19:52
  • 1879

Android中的事件分发机制(上)——ViewGroup的事件分发

Android中的事件分发机制也就是View与ViewGroup的对事件的分发与处理。在ViewGroup的内部包含了许多View,而ViewGroup继承自View,所以ViewGroup本身也是一...
  • ljd2038
  • ljd2038
  • 2016-05-13 13:31:43
  • 11075

View的事件分发机制(ViewGroup篇)

/** * {@inheritDoc} */ @Override public boolean dispatchTouchEvent(MotionEvent ev)...
  • freedom13905149949
  • freedom13905149949
  • 2016-08-03 19:58:00
  • 644

Android 简述事件分发机制

ViewGroup有三个方法: Touch 事件相关方法 方法功能 标记 dispatchTouchEvent(MotionEvent ev) 事件分发 1 onInterc...
  • jingbin_
  • jingbin_
  • 2016-10-14 19:08:30
  • 876

站在大神肩膀上,深入理解 Android事件分发机制

站在大神肩膀上,深入理解android事件分发机制
  • cjc_karen
  • cjc_karen
  • 2016-05-13 01:19:02
  • 5984

Android事件分发机制 详解攻略,您值得拥有

前言 Android事件分发机制是Android开发者必须了解的基础 网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全、思路不清晰、无源码分析、简单问题复杂化等等 今天,我...
  • carson_ho
  • carson_ho
  • 2017-01-06 11:43:05
  • 52962

Android事件分发机制源码畅游解析(Activity篇)

本篇是事件分发的终篇(涉及到其他知识点先不细说),建议先研究下View篇 和 ViewGroup篇 。可有童鞋就说了,就喜欢先看总体框架、流程,再仔细琢磨,那么咱就开工!...
  • hds2011
  • hds2011
  • 2017-04-25 16:34:29
  • 237
收藏助手
不良信息举报
您举报文章:事件分发机制
举报原因:
原因补充:

(最多只允许输入30个字)