Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90014
  • 博文数量: 24
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 231
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-13 21:06
个人简介

来也匆匆 几十繁华一阵风; 去也匆匆 回头一看已成空

文章分类

全部博文(24)

文章存档

2016年(4)

2015年(20)

我的朋友

分类: Android平台

2015-10-01 11:44:14

先看一下Android源码中对于View中dispatchTouchEvent的实现:

点击(此处)折叠或打开

  1. public boolean dispatchTouchEvent(MotionEvent event){
  2.         ... ...
  3.         if(onFilterTouchEventForSecurity(event)){
  4.             ListenerInfo li = mListenerInfo;
  5.             if(li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED
  6.                 && li.mOnTouchListener.onTouch(this, event)) {
  7.                 return true;
  8.             }
  9.             if(onTouchEvent(event)){
  10.                 return true;
  11.             }
  12.         }
  13.         ... ...
  14.         return false;
  15.     }
    可以看到onTouchListener的接口的优先级是要高于onTouchEvent的,假若onTouchListener中的onTouch方法返回true,表示此次事件已经被消费了,那onTouchEvent是接收不到消息的。

综合来讲:

    onTouchListener的onTouch方法优先级比onTouchEvent高,会先触发。

    假如onTouch方法返回false会接着触发onTouchEvent,反之onTouchEvent方法不会被调用。

    内置诸如click事件的实现等等都基于onTouchEvent,假如onTouch返回true,这些事件将不会被触发。









阅读(1628) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~