Android 事件传递

在View中跟Touch相关的事件有dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent三种。dispatchTouchEvent是负责分发事件的,事件从Activity传递出来之后,最先到达的就是最顶层view的dispatchTouchEvent,然后它进行分发,如果返回false,则交给这个view的interceptTouchEvent方法来决定是否要拦截这个事件,如果interceptTouchEvent返回true,也就是拦截掉了,则交给它的onTouchEvent来处理,如果interceptTouchEvent返回false,那么就传递给子view,由子view的dispatchTouchEvent再来开始这个事件的分发。

如果事件传递到某一层的子view的onTouchEvent上了,这个方法返回了false,那么这个事件会从这个view往上传递,都是onTouchEvent来接收。而如果传递到最上面的onTouchEvent也返回false的话,这个事件就会“消失”,而且接收不到下一次事件。(我说的一次事件指的是down到up之间的一系列事件)。

总结一下,如果这一次事件没有人呢消耗掉,则系统不会给你下一次事件,因为他会认为你这次的事件阻塞了,没必要给下一次。onTouchEvent如果不消耗的话,会从子view传递到父view。

posted @ 2012-07-23 13:11  淽沐  阅读(162)  评论(0编辑  收藏  举报