1.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@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {Log.i("LTAG", "LLayout onInterceptTouchEvent");Log.i("LTAG", "LLayout onInterceptTouchEvent default return" + super.onInterceptTouchEvent(ev));return super.onInterceptTouchEvent(ev);}// View@Overridepublic 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@Overridepublic 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.LViewandroid: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事件。
通过log能看出他们的执行顺序,认真比较后就知道他们的区别在哪里了

Android中 onTouchEvent() 与 onInterceptTouchEvent()事件的区别详解相关推荐

  1. android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)

    ListView的主要有两种滑动事件监听方法,OnTouchListener和OnScrollListener 1.OnTouchListener OnTouchListener方法来自View中的监 ...

  2. python frozenset_Python中set与frozenset方法和区别详解

    set(可变集合)与frozenset(不可变集合)的区别: set无序排序且不重复,是可变的,有add(),remove()等方法.既然是可变的,所以它不存在哈希值.基本功能包括关系测试和消除重复元 ...

  3. html offsetwidth 字符串宽度,基于js中style.width与offsetWidth的区别(详解)

    作为一个初学者,经常会遇到在获取某一元素的宽度(高度.top值...)时,到底是用 style.width还是offsetWidth的疑惑. 1. 当样式写在行内的时候,如 时,用 style.wid ...

  4. android datepicker使用方法,android中DatePicker和TimePicker的使用方法详解

    本文以实例讲述了android中DatePicker和TimePicker的使用方法,具体步骤如下: 下面是实现具体功能的代码,其中main.xml代码为: android:layout_width= ...

  5. Android中List、Set、Map数据结构详解

    Android中一般使用的数据结构有java中的基础数据结构List,Set,Map.还有一些Android中特有的几个,SparseArray(使用Map时Key是int类型的时候可以用这个代替)等 ...

  6. android中接口的作用是什么意思,详解Android接口Interface的使用和意义

    本文介绍是Android的一个重要的东西,接口Interface,详解两个方面: (1)Java是继承的,接口Interface是可以多个的,恰恰弥补了这个缺点. (2)回调,接口Interface里 ...

  7. Android中Canvas绘图之Shader使用图文详解

    概述 我们在用Android中的Canvas绘制各种图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形.那么Shader是什 ...

  8. java中public_java中public class与class的区别详解

    以下是对java中public class与class的区别进行了分析介绍,需要的朋友可以过来参考下 在编写类的时候可以使用两种方式定义类:public class定义类: class定义类:如果一个 ...

  9. android中进行https连接的方式的详解

    比较不错的帖子哦 android Video Buffer傳輸流程 http://www.eoeandroid.com/thread-195728-1-1.html 利用反射机制,封装 SAX解析类, ...

最新文章

  1. 函数声明末尾的“ const”是什么意思? [重复]
  2. 新风系统风速推荐表_家用新风常用管道规格和对应风量推荐值
  3. Python学习笔记:Day13 提升开发效率
  4. java可存储100个整数的数组_定义一个一维整数数组,其中储存1000个1至100以内的整数,并统计出整数出现的次数(Java写出来)...
  5. GPC:使用GPC计算intersection容易出现的问题
  6. tensor也可以作为索引
  7. Consider defining a bean of type ‘java.lang.String‘ in your configuration
  8. 000 初步使用Kotlin开发Android应用
  9. LabelImg使用方法
  10. 林子雨_大数据技术原理与应用课后习题
  11. linux ansys14.0,linux 安装 ansys14
  12. azure linux root密码,Azure Linux 云主机使用Root超级用户登录
  13. Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java14 的新特性
  14. c语言 ppm 大小,PPM图像处理器
  15. pcf8563c语言程序,PCF8563T标准驱动源程序
  16. watch:{} 与 this.$watch() 一样
  17. kubernetes中的PV、PVC
  18. sql注入登陆(菜鸟级)
  19. Python读写zip压缩文件的方法
  20. 【机器学习基础】乡村F4带你入门线性回归 带python代码示例(一)

热门文章

  1. 共享内存映射之mmap()函数详解
  2. 测试管理工具QC使用指南--QC用户
  3. Chrome 谷歌浏览器升级之后自动保存账号名和密码不能用了?
  4. js截取,拼接,字符串方法
  5. MySQL 玄学问题总结
  6. MySQL数据库分表与分区
  7. HTTP调试工具:Fiddler介绍
  8. 在 Linux 上搭建 Hubot 聊天机器人服务器
  9. 【7班】【笔记】人体姿态估计与MMPose-卢策吾
  10. gis实验——数字地形分析