android-事件体系

View事件event

什么是事件,当用户触摸屏幕的时候,就会产生一个事件event

事件相关的细节(发生触摸的位置、时间、历史记录、手势动作等都封装在MotionEvent中)


touch事件有如下四种:

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

事件列表
android 事件从产生到结束一共经过如下这几个过程

  • 用户按下view->actiondown-按下
  • 用户滑动view->actionmove-移动
  • 用户抬起手->actionup-抬起 结束

事件的分发机制

android 事件分发主要有三个方法控制:

1. onDispatchTouchEvent()   事件的分发
2. onInterceptTochEvent()    事件的拦截
3. onTouchEvent()       事件的消费
onDispatchTouchEvent() 事件的分发
属性 介绍
作用对象 Activity、ViewGroup、View
作用 分发点击事件
调用时刻 当点击事件能够传递给当前对象的时候,就会调用该方法
返回结果 是否消费当前事件:详细情况如下

返回super.dispatchTouchEvent(ev) 表示调用父类中的方法

  1. 返回true 表示
    • 消费这个事件
    • 事件不会向下传递
    • 后续的(move、up)会继续分发给该view
  2. 返回false 表示
    • 不消费这个事件
    • 事件也不会向下传递
    • 将事件回传给父类的onTouchEvent()
    • 后续的(move、up)会继续分发给该view

注意: 有一个特例: 在activity中,onDispatchTouchEvent()返回false的时候,表示消费事件

onTouchEvent()

onTouchEvetn与onDispatchTouchEvent()类似

属性 介绍
作用对象 Activity、ViewGroup、View
作用 处理点击事件
调用时刻 在onDispatchTouchEvent()内部调用
返回结果 是否消费处理当前事件:详细情况如下
  1. 返回true

    • 自己消费处理事件
    • 事件停止传递
    • 后续事件也由自己处理
  2. 返回false

    • 不处理消费事件
    • 事件向上传递给父类的onTouchEvent()处理
    • 当前view不再接受处理其他事件(move、up)
onDispatchTouchEvent()

onDispatchTouchEvent只有GroupView才有此方法

属性 介绍
作用对象 ViewGroup(注:Activity、View中都没有)
作用 处理拦截事件
调用时刻 ViewGroup中onDispatchTouchEvent()内部调用
返回结果 是否拦截当前事件:详细情况如下
  1. 返回true

    • 拦截事件
    • 事件不会向下传递
    • 自己处理事件,即调用自己的onTouchEvent()
    • 同一个事件列中的事件都由该事件处理
  2. 返回false

    • 不拦截事件
    • 事件会向下传递
    • 事件传递到子view,调用子view的onDispatchTouchEvent()处理
    • 当前view任然接受其他事件(和onTouchEvent()不同)

参考:

View的事件体系

Android事件分发机制详解:史上最全面、最易懂

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

相关阅读更多精彩内容

友情链接更多精彩内容