当前位置:首页 > 芯闻号 > 充电吧
[导读]当用户触摸屏幕时,系统会对触摸事件做出相应的相应,这个事件会产生一个MotionEvent,系统根据一定的规则将其传递给View进行处理,这个过程就是事件分发机制了。事件的传递分为两个阶段,即捕获阶段

当用户触摸屏幕时,系统会对触摸事件做出相应的相应,这个事件会产生一个MotionEvent,系统根据一定的规则将其传递给View进行处理,这个过程就是事件分发机制了。

事件的传递分为两个阶段,即捕获阶段和冒泡阶段。捕获阶段:事件最先由最外层的View接收,然后依次向内层传递,直到传递到最小的View,捕获阶段完成;冒泡阶段:也就是捕获阶段的逆过程,先由最小的View开始向外冒泡,直到将事件传递到最外层View。

在捕获和冒泡的过程中,可以控制事件是否被拦截,是否继续分发,还是做出响应后消费掉,这里是通过三个方法来控制事件的传递和消费机制的,系统又根据方法的返回值来进行相应的控制:

事件分发方法:publicbooleandispatchTouchEvent(MotionEventev)

当系统监听到事件时,首先由Activity捕获到,如果该方法中返回true,表示事件将不进行分发了,并且事件自身被消费掉了,此时事件分发过程结束;如果该方法返回为false,表示事件还是不会向下分发,而是由上层的onTouchEvent方法进行消费;如果该方法返回为 super.dispatchTouchEvent(ev),事件将分发给本层的事件拦截onInterceptTouchEvent 方法进行处理。

事件拦截方法:publicbooleanonInterceptTouchEvent(MotionEventev)

如果该方法返回 true,表示将事件进行拦截,并将拦截到的事件交由本层控件的onTouchEvent进行处理;如果该方法返回是false或super.onInterceptTouchEvent(ev),则表示不对事件进行拦截,并将事件分发到子View,由子View的dispatchTouchEvent进行处理。

事件响应方法:public booleanonTouchEvent(MotionEventev)

如果该方法返回true,表示onTouchEvent处理完事件后消费了此次事件,此时事件终结,将不会进行后续的冒泡;如果onTouchEvent返回false或super.onTouchEvent(ev),事件在onTouchEvent中处理后继续向上层View冒泡,且由上层View的onTouchEvent进行处理。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭