当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 >
Android事件分发
时间:2018-09-26作者:华清远见

当用户触摸屏幕时,系统会对触摸事件做出相应的相应,这个事件会产生一个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进行处理。


发表评论

全国咨询电话:400-611-6270,双休日及节假日请致电值班手机:15010390966

在线咨询: 曹老师QQ(3337544669), 徐老师QQ(1462495461), 刘老师 QQ(3108687497)

企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300)

Copyright 2004-2018 华清远见教育集团 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号