View 事件传递

1、基础知识

(1) 所有 Touch 事件都被封装成了 MotionEvent 对象,包括 Touch 的位置、时间、历史记录以及第几个手指(多指触摸)等。

(2) 事件类型分为ACTION_DOWN,ACTION_UP,ACTION_MOVE,ACTION_POINTER_DOWN,ACTION_POINTER_UP,ACTION_CANCEL,每个事件都是以 ACTION_DOWN 开始 ACTION_UP 结束。

(3) 对事件的处理包括三类,分别为传递——dispatchTouchEvent()函数、拦截——onInterceptTouchEvent()函数、消费——onTouchEvent()函数和 OnTouchListener

2、传递流程

(1) 事件从 Activity.dispatchTouchEvent()开始传递,只要没有被停止或拦截,从最上层的 View(ViewGroup)开始一直往下(子 View)传递。子 View 可以通过 onTouchEvent()对事件进行处理。

(2) 事件由父 View(ViewGroup)传递给子 View,ViewGroup 可以通过 onInterceptTouchEvent()对事件做拦截,停止其往下传递。

(3) 如果事件从上往下传递过程中一直没有被停止,且最底层子 View 没有消费事件,事件会反向往上传递,这时父 View(ViewGroup)可以进行消费,如果还是没有被消费的话,最后会到 Activity 的 onTouchEvent()函数。

(4) 如果 View 没有对 ACTION_DOWN 进行消费,之后的其他事件不会传递过来。

(5) OnTouchListener 优先于 onTouchEvent()对事件进行消费。

上面的消费即表示相应函数返回值为 true。

(1) View 不处理事件流程图


图片发自简书App

(2) View 处理事件流程图


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

相关阅读更多精彩内容

  • 点击事件的传递规则 点击事件,说直接一点就是MotionEvent对象,事件的传递,就是将MotionEvent对...
    Cris_Ma阅读 3,207评论 0 1
  • Android View事件传递 期待与大家共同进步,若有错误请指出,谢谢~ bloggithub简书 事件 Vi...
    HaKu阅读 5,794评论 0 8
  • 1、基础知识 (1) 所有 Touch 事件都被封装成了 MotionEvent 对象,包括 Touch 的位置、...
    QM阅读 3,890评论 0 51
  • 摘录自:wangkuiwu' Homepage ps: 需要具体源码分析的童鞋可以转战原文博客,内容十分详尽,此文...
    Jimmy_gjf阅读 6,298评论 0 6
  • View事件主要包括以下三种动作: ACTION_DOWN : 手指按下接触屏幕的动作 ACTION_MOVE ...
    Sanisy阅读 3,836评论 0 0

友情链接更多精彩内容