您的位置:首页 > 移动开发 > Android开发

浅谈android事件分发机制

2015-10-30 09:02 651 查看
一.基础知识1. 所有的touch事件都会被封装到MotionEvent的对象里面 ,包括时间 ,按下的点.
2.事件的类型分为,按下的事件 ,滑动的事件 ,抬起的事件 ,当然 android已经把这几个事件标记为了常量,分别为 MotionEvent.ACTION_DOWN:    MotionEvent.ACTION_MOVE   MotionEvent.ACTION_UP 三个事件3.对事件的处理包括3类 分为3类, 负责分发的函数 dispatchTouchEvent(MotionEvent ev) 负责拦截的事件,onInterceptTouchEvent()函数 负责处理的事件,onTouchEvent()函数和OnTouchListener 函数
二. 事件的传递,
1 首先事件从Activity的dispatchTouchEvent()开始分发,只要没有被拦截或者停止 从最上层的View(ViewGroup)通过ViewGrop的dispatchTouchEvent()再次向子View分发 事件 ,子View接受到事件以后,再通过子View的dispatchTouchEvent()分发到子View的onTouchEvent()函数进行处理 .
2.事件由父View(ViewGroup)向子View传递的过程中,父View可以通过onInterceptTouchEvent()函数返回true对事件进行拦截.
3.如果事件 从上向下传递的过程中,一直到子View并且子View也并没有消费到事件(通过onTouchEvent()方法返回true来消费掉此次事件)会再次回传到父View(ViewGroup)的OnTouchEvent()方法来处理 ,如果父类也没有消费到事件的话 ,会一直回传到Activity的OnTouchEvent()方法来处理事件
4 如果子View没有对MotionEvent.ACTION_DOWN 消费的话 ,就相当于把控制权交出去了  之后的Move和Up事件不会回传回来的,而是直接在Activity中或者父类中处理
5 OnTouchListener优先于onTouchEvent()对事件进行消费。
6 .下面有一个Demo可以下载看看

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: