android事件分发的理解:
本文知识点:
- 理解事件分发的流程;
- 知道事件分发的调用顺序;
- 相应方法的执行流程。
首先事件分发流程是在Activity、ViewGroup、View三者之间进行传递的,但是这里你首先要理解分发的几个相应发方法
- Activity
- dispatchTouchEvent
- onTouchEvent
- ViewGroup
- dispatchTouchEvent
- onTouchEvent
- onInterceptTouchEvent
- View
- dispatchTouchEvent
- onTouchEvent
andorid事件分发流程其次应该明白一个概念,所有的事件分发都是基础相应的手势进行处理的,也就是说从你按下屏幕的那一刻开始的,然后直接传递到相应页面的Activity上,然后就有了下面这张比较潦草的图片了...
图画的不怎么样,大家将就看吧!能明白就好
首先先理解一下上面的图片含义吧!
1.Activity层的内容:
首先事件会传递到相应Activity的dispathTouchEvent方法中,如果你想要在这里处理相应的点击事件返回true,false的话,之后的ViewGroup就不能收到相应的时间了,事件到此就终止了!但如果你要是不去重写这个方法的话,才会将事件传递到相应的ViewGroup。
2.ViewGroup层的内容
因为ViewGroup有相应的onInterceptTouchEvent方法,所以这里略显的复杂一点,也就是传说中的事件分发了!首先事件会传递到相应的dispathTouchEvent方法中
- dispatchTouchEvent 这里分以下几种情况:
- 返回 fasle -> 说明你不去处理这次事件,那么没办法,只有交给上层Activity的onTouch进行处理
- 返回 true -> 说明你消费了这次事件,事件到此终止,不会继续向下传递了
- 什么也不做 super.dispatchTouchEvent(ev) -> 那么就传递到相应的onInterceptTouchEvent进行处理
- onInterceptTouchEvent(分发相应的事件)这里也分为以下几种情况:
- 返回true -> 交给自己的onTouch进行处理,就是说我要处理这个事件,也相当于消费了本次事件,事件就此终止;
- 返回false或者super.onInterceptTouchEvent(ev) -> 我不进行分发了,继续向下传递吧!也就交给了相应的子View进行处理了!
3.View层的内容
因为View层没有相应的onInterceptTouchEvent方法,所以这里和Activity没有什么太大的区别首先也是传递到相应的dispathTouchEvent方法中
- dispathTouchEvent这里分以下几种情况:
- true -> 代表View消费了相应的事件,事件就此终止。
- false-> 我也不想去处理,这个时候只能是ViewGroup的onTouch去处理了
- super.onTouchEvent(event) ->还是交给自己的Touch去处理吧!
4.右侧的onTouch侧的内容
其实所有的onTouch处理的办法都类似,如果自己不想处理(返回false或者返回super.onTouchEvent(event))就直接交给上一层去处理,如果想处理的话(返回true)那么事件就在相应的onTouch中被消费了
关于事件分发的整体流程就是这样的,所有的内容我都是log进行测试的,如果有什么不对的希望大家指出,我会马上更正。
网友评论