事件分发详解

View是如何被添加到屏幕窗口上

系统会创建一个顶层布局容器DecorView,它是一个ViewGroup容器继承与Framlayout,是phoneWindow对象持有的一个实例,它是所有程序的顶层View,在系统内部进行初始化。当DecorView初始化完成之后,系统会根据应用程序的主题特性加载一个基础容器,例如:NoActionBar,不同的主题加载的基础容器不一样。但是不管怎样一定会有一个id为content的容器,这个容器为Framlayout,而我们设置的setContentView就是被解析添加到了这个Framlayout当中。

事件的定义

定义:当用户触摸屏幕时,将产生的触摸行为(Touch事件)

事件类型

MotionEvent.ACTION_DOWN 手指刚接触屏幕
MotionEvent.ACTION_UP 手指从屏幕松开
MotionEvent.ACTION_MOVE 手指在屏幕上滑动
MotionEvent.ACTION_CANCEL 非人为因素取消

事件序列

正常情况下,一次手指触摸屏幕的行为会触发一系列点击事件

  • 点击屏幕后立即松开,事件序列为DOWN->UP
  • 点击屏幕滑动一会再松开,事件序列为DOWN->MOVE->···MOVE->UP
13212816.png

事件分发的对象

  • Activity:控制生命周期 & 处理事件
  • ViewGroup:一组View的集合(含多个子View)
  • View:所有UI组件的基类

事件分发主要方法

  • dispatchTouchEvent(MotionEvent ev):用来进行事件分发
  • onInterceptTouchEvent(MotionEvent ev): 判断是否拦截事件(只存在ViewGroup中)
  • onTouchEvent(MotionEvent ev): 处理点击事件

事件分发模型

事件分发模型.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 13,597评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 9,775评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 127,770评论 2 7

友情链接更多精彩内容