Android onTouchEvent 与 onInterceptTouchEvent的区别详解
首先从字面意思理解两个词
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的区别详解相关推荐
- 浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解
浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解 本篇文章小编为大家介绍,Android onTouchEvent 与 onInterceptTo ...
- oppor15版本android,OPPOR15和R15梦境版区别详解
你们知道OPPOR15和R15梦境版有哪些区别吗?怎么样开启这项功能呢?对此感兴趣的用户可以随小编去下文看看OPPOR15和R15梦境版区别详解. OPPOR15和R15梦境版区别详解 在颜色方面,两 ...
- 红米3 android 版本,红米3四款手机有什么不同?红米3系列手机各版本区别详解
近日,红米手机3的指纹识别升级版本通过工信部认证正式亮相.今天红米3系列产品再次亮相工信部.加上此前亮相的红米3指纹识别升级 版,如今工信部认证中共有4款红米3系列的手机.分别是2015810/201 ...
- vivo x23 android版本,vivo X23幻彩版图赏及与普通版的区别详解
vivo X23幻彩版图赏及与普通版的区别详解 2018-12-15 18:30:00 8点赞 10收藏 7评论 近日,vivo联手国内流量小生蔡徐坤推出了全新的X23幻彩版,狂赚一波流量.幻彩版X2 ...
- android任务 进程 线程详解,Android任务、进程、线程详解
singleTop模式,基本上于standard分歧,仅正在请求的Activity反好位于栈顶时,无所区别.此时,配放成singleTop的Activity,不再会构制新的实例加入到Task栈外,而是 ...
- Android Doze and App Standby模式详解
Android Doze and App Standby模式详解 来源:腾云阁 https://www.qcloud.com/community Optimizing for Doze and Ap ...
- android触摸滑动监听,Android 滑动监听的实例详解
Android 滑动监听的实例详解 摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置), ...
- utf8和utf8mb4的区别详解
utf8和utf8mb4的区别 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.utf8mb4是utf ...
- Android之TelephonyManager类的方法详解
林计钦-JAVA java技术群:127834248 博客园 首页 社区 新随笔 联系 订阅 管理 随笔-105 评论-24 文章-0 trackbacks-0 Andr ...
最新文章
- servlet——登录练习(登录页面登录请求登录请求处理)
- 支持向量机SVM原理
- ABAP从数据库中删除行
- 资料分享 | R语言资料分享来袭
- deepin配置JDK
- iframe在ie和firefox中的高度兼容性问题解决
- R语言模拟:Cross Validation
- android sqlitelog,如何解决Sqlitelog(13)语句中止在PhoneGap中的68错误android
- SPSS教程——游程检验使用方法,如何验证数据的随机性
- ocata版本vlan模式配置【ovs】
- 单片机内部FLASH的字节操作
- Redhat使用yum install时提示This system is not registered with an entitlement server 的解决办法
- Docker目录映射
- Google guava之Table简介说明
- python if any_python条件判断 all(),any()
- 安装程序无法打开注册表项 UNKNOWN\Components\…的简单解决办法
- TypeScript基础 ts文件的创建与执行
- 未来 3 年,什么样的技术人,最有机会年赚 100万?
- 一款简洁的 image-crop.js图片裁剪工具
- 信号量集(主要是AND信号量)
热门文章
- 固定资产系统管理软件最新完整版,固定资产管理系统免费版
- 碳交易机制下考虑需求响应的综合能源系统优化运行
- DIC技术用于齿轮啮合变形测量
- orange+pi+android+7,全志H6四核1.8GHZ的Orange pi 3来了!新一代ARM开发板,64位系统级芯片......
- 准备金率上调,银行贷款加息对房产的影响
- Java简介超详细整理,适合新手入门
- H3CTE认证网络排错讲师视频课程-宋文峰-专题视频课程
- <delete></delete>
- 基于ETest_D的火控系统电源组件自动测试仪国产化设计
- 3D立体相册模板(大小可更改)