码迷,mamicode.com
首页 > 移动开发 > 详细

图片会说话系列之Android事件的分发传递机制

时间:2015-04-24 12:38:14      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:android   事件传递   事件分发   

在一些复杂布局中,经常会遇到事件冲突,事件失效等问题,这就需要我们深入理解Android事件的分发传递机制。最好的方法是自己写一个demo,打印事件相关的日志查看其运行流程,然后再结合源码去深入理解。当然这里不会做这些,这里只有总结性的东西,如果你喜欢这种东西,那么请继续往下看。

老规矩,先上图:

技术分享

用户的交互一般发生在触摸屏上,因此Android事件的传递必然涉及到ViewGroupViewViewGroupView包含的处理事件传递的方法分别如下: 

ViewGroup:

<span style="font-size:14px;">public boolean dispatchTouchEvent(MotionEvent event)
public boolean onTouchEvent(MotionEvent event) 
public boolean onInterceptTouchEvent(MotionEvent event)</span>

View

<span style="font-size:14px;">public boolean dispatchTouchEvent(MotionEvent event)
public boolean onTouchEvent(MotionEvent event) </span>


其中dispatchTouchEvent负责事件分发,onTouchEvent负责事件处理,onInterceptTouchEvent负责事件拦截。可以看到,只有ViewGroup才拥有onInterceptTouchEvent方法。

 

了解完事件相关的基本方法后,来看一些关键点:

1.Android事件的传递顺序:Activity--->ViewGroup--->View

2.如果dispatchTouchEvent中返回true,则不再往下继续分发,事件取消;返回false,则继续传递事件。

3.如果ViewGrouponInterceptTouchEvent返回true,则表示拦截事件,故不再往下传递给View,交给ViewGroup自身处理;如果返回false,则继续传递给View

4.如果onTouchEvent返回true,则表示其消费掉事件,但不会响应onClickListener;如果返回false,则会继续响应onClickListener,如果有设置过的话。

5.其他的可以参考上图中的具体描述。



图片会说话系列之Android事件的分发传递机制

标签:android   事件传递   事件分发   

原文地址:http://blog.csdn.net/ahence/article/details/45243987

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!