首先从字面意思理解两个词

onTouchEvent:触发触摸事件

onInterceptTouchEvent:触发拦截触摸事件

通过查看源代码及类继承关系

onInterceptTouchEvent:是定义于ViewGroup里面的一个方法,此事件是用于拦截触摸事件的,ViewGroup(继承自View),一个View的Group,也就是我们的一个布局如LinerLayout,各个布局类都继承自ViewGroup;

onTouchEvent:是定义于View中的一个方法,处理传递到View的手势触摸事件。手势事件类型包括ACTION_DOWN,ACTION_MOVE,ACTION_UP,ACTION_CANCEL等事件;

其中ViewGroup里的onInterceptTouchEvent默认返回值是false,这样touch事件会传递到View控件,ViewGroup里的onTouchEvent默认返回值是false;

View里的onTouchEvent默认返回值是true,当我们手指点击屏幕时候,先调用ACTION_DOWN事件,当onTouchEvent里返回值是true的时候,onTouch会继续调用ACTION_UP事件,如果onTouchEvent里返回值是false,那么onTouchEvent只会调用ACTION_DOWN而不调用ACTION_UP。

1、新建两个类LLayout , LView 如下

复制代码 代码如下:

public class LLayout extends FrameLayout {
 // ViewGroup
 @Override
 public boolean onInterceptTouchEvent(MotionEvent ev) {
  Log.i("LTAG", "LLayout onInterceptTouchEvent");
  Log.i("LTAG", "LLayout onInterceptTouchEvent default return" + super.onInterceptTouchEvent(ev));
  return super.onInterceptTouchEvent(ev);
 }
 // View
 @Override
 public boolean onTouchEvent(MotionEvent event) {
  Log.i("LTAG", "LLayout onTouchEvent");
  Log.i("LTAG", "LLayout onTouchEvent default return" + super.onTouchEvent(event));
  return super.onTouchEvent(event);
 }
}
public class LView extends Button {
 // TextView <-- View
 @Override
 public boolean onTouchEvent(MotionEvent event) {
  Log.i("LTAG", "onTouchEvent");
  Log.i("LTAG", "onTouchEvent default return" + super.onTouchEvent(event));
  return super.onTouchEvent(event);
 }
}

 2、修改布局文件为如下布局

复制代码 代码如下:

 <com.touchpro.LLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >
  <com.touchpro.LView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/app_name" />
</com.touchpro.LLayout>
 

(1)先点击界面中的按钮

(2)再点击界面中的其它区域

结论:LLayout 中 onInterceptTouchEvent 默认返回值为false,onTouchEvent 默认返回值为false,所以只调用了ACTION_DOWN事件;

LView中 onTouchEvent 默认返回值为true;调用了ACTION_DOWN,ACTION_UP 两个事件;

(3)修改LLayout中onInterceptTouchEvent返回值为true,再次运行代码:

结论:LLayout中onInterceptTouchEvent返回了true,对触摸事件进行了拦截,所以没有将事件传递给View,而直接执行了LLayout中的onTouchEvent事件;

(4)把LLayout中onInterceptTouchEvent返回值改为false,再把LView中的onTouchEvent改为返回false:

结论:由于将LView中onTouchEvent返回值修改为false,因此只执行了ACTION_DOWN,然后就到LLayout中执行onTouchEvent事件了;

ViewGroup里的onInterceptTouchEvent默认值是false这样才能把事件传给View里的onTouchEvent.

ViewGroup里的onTouchEvent默认值是false。

View里的onTouchEvent返回默认值是true.这样才能执行多次touch事件。

Android onTouchEvent 与 onInterceptTouchEvent的区别详解相关推荐

  1. 浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解

    浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解 本篇文章小编为大家介绍,Android onTouchEvent 与 onInterceptTo ...

  2. oppor15版本android,OPPOR15和R15梦境版区别详解

    你们知道OPPOR15和R15梦境版有哪些区别吗?怎么样开启这项功能呢?对此感兴趣的用户可以随小编去下文看看OPPOR15和R15梦境版区别详解. OPPOR15和R15梦境版区别详解 在颜色方面,两 ...

  3. 红米3 android 版本,红米3四款手机有什么不同?红米3系列手机各版本区别详解

    近日,红米手机3的指纹识别升级版本通过工信部认证正式亮相.今天红米3系列产品再次亮相工信部.加上此前亮相的红米3指纹识别升级 版,如今工信部认证中共有4款红米3系列的手机.分别是2015810/201 ...

  4. vivo x23 android版本,vivo X23幻彩版图赏及与普通版的区别详解

    vivo X23幻彩版图赏及与普通版的区别详解 2018-12-15 18:30:00 8点赞 10收藏 7评论 近日,vivo联手国内流量小生蔡徐坤推出了全新的X23幻彩版,狂赚一波流量.幻彩版X2 ...

  5. android任务 进程 线程详解,Android任务、进程、线程详解

    singleTop模式,基本上于standard分歧,仅正在请求的Activity反好位于栈顶时,无所区别.此时,配放成singleTop的Activity,不再会构制新的实例加入到Task栈外,而是 ...

  6. Android  Doze and App Standby模式详解

    Android  Doze and App Standby模式详解 来源:腾云阁 https://www.qcloud.com/community Optimizing for Doze and Ap ...

  7. android触摸滑动监听,Android 滑动监听的实例详解

    Android 滑动监听的实例详解 摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置), ...

  8. utf8和utf8mb4的区别详解

    utf8和utf8mb4的区别 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.utf8mb4是utf ...

  9. Android之TelephonyManager类的方法详解

    林计钦-JAVA java技术群:127834248 博客园   首页   社区   新随笔   联系   订阅   管理 随笔-105  评论-24  文章-0  trackbacks-0 Andr ...

最新文章

  1. servlet——登录练习(登录页面登录请求登录请求处理)
  2. 支持向量机SVM原理
  3. ABAP从数据库中删除行
  4. 资料分享 | R语言资料分享来袭
  5. deepin配置JDK
  6. iframe在ie和firefox中的高度兼容性问题解决
  7. R语言模拟:Cross Validation
  8. android sqlitelog,如何解决Sqlitelog(13)语句中止在PhoneGap中的68错误android
  9. SPSS教程——游程检验使用方法,如何验证数据的随机性
  10. ocata版本vlan模式配置【ovs】
  11. 单片机内部FLASH的字节操作
  12. Redhat使用yum install时提示This system is not registered with an entitlement server 的解决办法
  13. Docker目录映射
  14. Google guava之Table简介说明
  15. python if any_python条件判断 all(),any()
  16. 安装程序无法打开注册表项 UNKNOWN\Components\…的简单解决办法
  17. TypeScript基础 ts文件的创建与执行
  18. 未来 3 年,什么样的技术人,最有机会年赚 100万?
  19. 一款简洁的 image-crop.js图片裁剪工具
  20. 信号量集(主要是AND信号量)

热门文章

  1. 固定资产系统管理软件最新完整版,固定资产管理系统免费版
  2. 碳交易机制下考虑需求响应的综合能源系统优化运行
  3. DIC技术用于齿轮啮合变形测量
  4. orange+pi+android+7,全志H6四核1.8GHZ的Orange pi 3来了!新一代ARM开发板,64位系统级芯片......
  5. 准备金率上调,银行贷款加息对房产的影响
  6. Java简介超详细整理,适合新手入门
  7. H3CTE认证网络排错讲师视频课程-宋文峰-专题视频课程
  8. <delete></delete>
  9. 基于ETest_D的火控系统电源组件自动测试仪国产化设计
  10. 3D立体相册模板(大小可更改)