美文网首页
Android事件分发

Android事件分发

作者: 沐络 | 来源:发表于2019-07-18 11:05 被阅读0次

Android中事件分发的流程是,Activity->window->DecorView->然后开始遍历子View和ViewGroup的过程,此过程类似于,有一件事过来,首先到相关事件负责人那里,然后逐层,往下边员工传递,在中间过程中有某一次处理了,则下层就无法收到该事件,相当于事件分发中的拦截过程。

主要涉及的方法为

dispatchTounchEvent()->onInterceptTounchEvent()->onTounchEvent()

其中dispatchTounchEvent主要负责事件的分发

return true : View消费所有事件。

return false :停止分发,交由上层控件的onTouchEvent方法进行消费,如果本层控件是Activity,那么事件将被系统消费、处理。

super.dispatchTouchEvent(ev): 将事件交由本层的事件拦截onInterceptTouchEvent方法处理

onInterceptTounchEvent主要负责事件的拦截,此方法只有ViewGroup才有

return true: 对事件拦截,交由本层的onTouchEvent进行处理。

return false: 不拦截,分发到子View,由子View的dispatchTouchEvent方法处理。

super.onInterceptTouchEvent(ev):默认表示事件拦截,交由本层的onTouchEvent进行处理

onTounchEvent 理解事件的响应处理操作

return true: 表示onTouchEvent处理完事件后消费了此次事件。

return false: 不响应事件,不断的传递给上层的onTouchEvent方法处理,直到某个View的onTouchEvent返回true,则认为该事件被消费。如果到最顶层View还是返回false,那么该事件不消费,将交由Activity的onTouchEvent进行处理。

return: super.onTouchEvent,不响应事件,结果与return返回false一样

一)View的事件分发

View.dispatchTounchEvent()->View.onTounch()

返回false,则事件没有被消费掉,继续往下传递,返回true,则不再传递,不调用onClick()

二)ViewGroup的事件分发

ViewGroup.dispatchTouchEvent()->ViewGroup.onInterceptTouchEvent()

返回false为默认不拦截,返回true则拦截,不允许事件网子View传递

相关文章

网友评论

      本文标题:Android事件分发

      本文链接:https://www.haomeiwen.com/subject/kkbklctx.html