触摸事件拦截机制
在MotionEvent中封装了不少的事件类型,如
- 按下MotionEvent.ACTION_DOWN
- 移动MotionEvent.ACTION_MOVE
- 离开MotionEvent.ACTIION_MOVE
等
假设现在有三个控件,分别用三个职位来表示
这三个控件的关系是ViewGroupA 包含 ViewGroupB,ViewGroupB 包含 myView。
- 总经理 代表 ViewGroupA
- 部门负责人代表 ViewGroupB
- 程序员 myView
假如现在有一个 项目介入进来
- 事件的传递关系是:总经理分发给部长,部长分发给程序员。
- 事件的处理关系是:程序员汇报部长,部长汇报总经理。
那么换装view控件中来,dispatcfhTouchEvent和OninterceptTouchEvent负责事件的分发,也就是前边所说道的任务分发。onTouchEvent 负责事件的执行。
假如现在用户在myView中做了一个触碰操作,那么
- 事件的分发到执行
1.dispatcfhTouchEvent ViewGroupA , OninterceptTouchEvent ViewGroupA
2.dispatcfhTouchEvent ViewGroupB , OninterceptTouchEvent ViewGroupB
3.dispatcfhTouchEvent myView, onTouch myView
4.onTouch ViewGroupA
4.onTouch ViewGroupB
分发的时候
- 返回false表示未拦截,继续分发任务
- 返回ture表示拦截任务,不在继续分发给子控件,自己执行onTouchEvent
处理的时候
- 返回false表示未处理完成,交给父集控件处理。
- 返回ture表示不在像负空间汇报,自己决定自己的命运。