码迷,mamicode.com
首页 > 其他好文 > 详细

0102 触摸事件 主要方法

时间:2016-05-05 12:56:49      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

 

 三者关系的伪代码:

public boolean dispatchTouchEvent(MotionEvent ev){    
    boolean consume = false;
    if(onInterceptTouchEvent(ev)){
        consume = onTouchEvent(ev);
    }else{
        consume = child.dispatchTouchEvent(ev);   
    }
    return consume;
}

 

 


 

 

dispatchTouchEvent()用来分发事件
 

Android中所有的事件都必须经过这个方法的分发,然后决定是自身消费当前事件还是继续往下分发给子控件处理

返回结果受当前View的onTouchEvent和下级View的dispatchTouchEvent方法影响,表示是否消耗该事件。

返回true表示不继续分发,事件被消费(事件会传递给当前控件的onTouchEvent(),这就是所谓的Intercept(拦截))。

返回false则继续往下分发,如果是ViewGroup则分发给onInterceptTouchEvent进行判断是否拦截该事件。

 


dispatchTouchEvent()方法里面调用了onInterceptTouchEvent()和onTouchEvent()。一般不重写该方法。

 


 

 

onInterceptTouchEvent()用来拦截事件

如果当前View拦截了某个事件,那在同一个事件序列中,此方法不会再次调用,返回结果表示是否拦截当前事件

若返回值为True,表示拦截了事件, 则事件将终止向下(子View)传递,事件会传递到自己的onTouchEvent()。,事件由当前ViewGroup类的onTouchEvent来处理

若返回值为False传递到事件将向下传递,传递给其子View的dispatchTouchEvent();

ViewGroup类中的源码实现就是{return false;}表示不拦截该事件,;

 

正确的使用方法是,在此方法内仅判断事件是否需要拦截,然后返回。即便需要拦截也应该直接返回true,然后由onTouchEvent方法进行处理。

 


 

 

onTouchEvent():用来处理事件,消费事件


返回值决定当前控件是否消费(consume)了这个事件。尤其对于ACTION_DOWN事件,

返回true,事件由自己处理消耗,后续动作序列让其处理;表示我想要处理后续事件;

返回false,自己不消耗事件了,向上返回让其他的父view的onTouchEvent接受处理;

 

 


 

 

 

0102 触摸事件 主要方法

标签:

原文地址:http://www.cnblogs.com/zhiqixue/p/5461199.html

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