android-事件体系
2018-08-20 本文已影响32人
三季人
View事件event
什么是事件,当用户触摸屏幕的时候,就会产生一个事件event
事件相关的细节(发生触摸的位置、时间、历史记录、手势动作等都封装在MotionEvent中)
touch事件有如下四种:
- MotionEvent.ACTION_DOWN:按下View(所有事件的开始)
- MotionEvent.ACTION_MOVE:滑动View
- MotionEvent.ACTION_CANCEL:非人为原因结束本次事件
- 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) 表示调用父类中的方法
- 返回true 表示
- 消费这个事件
- 事件不会向下传递
- 后续的(move、up)会继续分发给该view
- 返回false 表示
- 不消费这个事件
- 事件也不会向下传递
- 将事件回传给父类的onTouchEvent()
- 后续的(move、up)会继续分发给该view
注意: 有一个特例: 在activity中,onDispatchTouchEvent()返回false的时候,表示消费事件
onTouchEvent()
onTouchEvetn与onDispatchTouchEvent()类似
属性 | 介绍 |
---|---|
作用对象 | Activity、ViewGroup、View |
作用 | 处理点击事件 |
调用时刻 | 在onDispatchTouchEvent()内部调用 |
返回结果 | 是否消费处理当前事件:详细情况如下 |
-
返回true
- 自己消费处理事件
- 事件停止传递
- 后续事件也由自己处理
-
返回false
- 不处理消费事件
- 事件向上传递给父类的onTouchEvent()处理
- 当前view不再接受处理其他事件(move、up)
onDispatchTouchEvent()
onDispatchTouchEvent只有GroupView才有此方法
属性 | 介绍 |
---|---|
作用对象 | ViewGroup(注:Activity、View中都没有) |
作用 | 处理拦截事件 |
调用时刻 | ViewGroup中onDispatchTouchEvent()内部调用 |
返回结果 | 是否拦截当前事件:详细情况如下 |
-
返回true
- 拦截事件
- 事件不会向下传递
- 自己处理事件,即调用自己的onTouchEvent()
- 同一个事件列中的事件都由该事件处理
-
返回false
- 不拦截事件
- 事件会向下传递
- 事件传递到子view,调用子view的onDispatchTouchEvent()处理
- 当前view任然接受其他事件(和onTouchEvent()不同)
参考: