Android事件的分发

来源:互联网 发布:linux运维门槛低 编辑:程序博客网 时间:2024/05/23 02:06


对于Android事件分发分小小理解,先来图看下:



Android的事件分发流程是这样的,起点是Activity,然后通过dispatchTouchEvent方法一层一层的向下进行分发,当

事件分发给ViewGroup的时候,ViewGroup还有个onInterceptTouchEvent可以决定是否拦截事件,拦截了就交给viewGroup

onTouchEvent,不拦截就分发下去,最后分发到底层view,如果底层view没有处理,就返回给上层ViewGrouponTouchEvent

如果都没有处理,最后会返回给ActivityonTouchEvent

 

dispatchTouchEvent(MotionEventev)方法中:

1、当returnsuper.dispatchTouchEvent(ev)时,事件会被正常的分发下去;

2、当return true时,事件则被当前方法给消费了,后续的move up事件都会被当前方法接收到

3、当return false时,后续事件不会再分发到当前view了,相当于接下来的事件与我无关了。

 

onInterceptTouchEvent(MotionEventev)方法中:

1、当return super.onInterceptTouchEvent(ev)时,事件默认不拦截

2、当return true时,事件会被拦截下来,交给自己的onTouchEvent处理

3、当return false时,同returnsuper.onInterceptTouchEvent(ev)

4onInterceptTouchEvent只在ACTION_DOWN事件中处理是否拦截的逻辑,后续MoveUp事件onInterceptTouchEvent是不起作用的

 

onTouchEvent(MotionEventev)方法中:

1、当returnsuper.onTouchEvent(ev)时,事件默认不接收

2、当returntrue时,事件会被接收处理。

3、当returnfalse时,同return super.onTouchEvent(ev)

4、如果ACTION_DOWN事件返回True,但后续MoveUp事件返回false,那么后续的事件该onTouchEvent方法依然能接收到,但不会处理它,会返回给上层的ViewGroup或者ActivityonTouchEvent,由他们来处理。

举例:ListView条目滑动处理。该listview可以上下滑动,也可以左右侧滑删除该条目:

微信,QQ已经实现该功能。

设置listview的setOnTouchListener方法,返回值不能为true,否则会将事件处理,这

样listview就不能滑动了。


参考资料:http://blog.csdn.net/footballclub/article/details/42424103?locationNum=9


0 0
原创粉丝点击