最近一直对事件分发机制理解有点模糊,今天看了一个博客,感觉有点渐渐的清晰,遂提笔记下,以便今后查阅。
事件分发机制,就是发生点击事件之后,父view会遍历自己所有的子view,来查找到底哪个view处理此事件,在这个过程中,会出现三个方法:dispatchTouchEvent(MotionEvent ev),oninterceptTouchEvent(MotionEvent ev),onTouchEvent(MotionEvent ev)。下面就简单介绍一下这三个方法: 1、事件分发 dispatchTouchEvent(MotionEvent ev):这个函数负责事件的分发,决定事件是否交给onInterceptTouchEvent(MotionEvent ev)来处理。 当返回true时,不会继续分发事件,内部处理所有事件(ACTION_DOWN,ACTION_MOVE,ACTION_UP) 当返回false时,会继续分发事件,内部只处理了ACTION_DOWN事件。 当返回super.dispatchTouchEvent时,由onInterceptTouchEvent来决定事件的流向, 2、事件拦截 onInterceptTouchEvent(MotionEvent ev):负责事件的拦截,决定事件是否传给子view,这个方法是viewgroup独有的. 当返回true时,拦截此事件,然后交给自己的onTouchEvent来处理。 当返回false时,不拦截此事件,交给子view来处理 3、事件响应 onTouchEvent(MotionEvent ev):事件最终到达的地方 当返回true时,表示onTouchEvent处理完事件之后消费了此事件,此事件终结, 当返回false时,不响应此事件,那么该事件将不断的向上层view的onTouchEvent传递,知道某个view的onTouchEvent方法返回true,如果到了顶层仍然返回false,那么认为此事件不被消耗。将会交于activity的onToucEvent来响应。
传送门 传送门