Android 触摸事件机制(一) 简介

目录
1触摸事件概述
2Activity, ViewGroup, View中的触摸事件API
3OnTouchListener接口

1. 触摸事件概述

本文介绍的触摸事件API和接口主要是:dispatchTouchEvent(), onTouchEvent(), onInterceptTouchEvent()和OnTouchListener接口。这些内容中,最复杂的莫过于dispatchTouchEvent(), onTouchEvent()和onInterceptTouchEvent()这三者之间的关系。如果你能认真读完本系列文章,相信对它们之间的关系,它们的原理和用法,很有很清晰的认识。

本文先对这些接口做个大致介绍,建立一个整体概念。后续再通过阅读Activity, View和ViewGroup中触摸事件API的源码,来对认识这些API;最后,再通过几个示例来进一步了解它们,同时也了解它们的用法。

2. Activity, ViewGroup, View中的触摸事件API

1. Activity中的触摸事件API
public boolean dispatchTouchEvent(MotionEvent ev);
public boolean onTouchEvent(MotionEvent ev);

2. ViewGroup中的触摸事件API
public boolean dispatchTouchEvent(MotionEvent ev);
public boolean onTouchEvent(MotionEvent ev);
public boolean onInterceptTouchEvent(MotionEvent ev);

3. View中的触摸事件API
public boolean dispatchTouchEvent(MotionEvent ev);
public boolean onTouchEvent(MotionEvent ev);

下面简单的说明一下涉及到的三个API的作用。

dispatchTouchEvent:它是传递触摸事件的接口。
(01) Activity将触摸事件传递给ViewGroup,ViewGroup将触摸事件传递给另一个ViewGroup,以及ViewGroup将触摸事件传递给View;这些都是通过dispatchTouchEvent()来传递的。
(02) dispatchTouchEvent(), onInterceptTouchEvent(), onTouchEvent()以及onTouch()它们之间的联系,都是通过dispatchTouchEvent()体现的。它们都是在dispatchTouchEvent()中调度的!因此,理解dispatchTouchEvent()是理解Android事件机制的关机;而其中,最关机的就是ViewGroup中的dispatchTouchEvent()
(03) 返回值:true,表示触摸事件被消费了;false,则表示触摸事件没有被消费。
onTouchEvent:它是处理触摸事件的接口。
(01) 无论是Activity, ViewGroup还是View,对触摸事件的处理,基本上都是在onTouchEvent()中进行的。因此,我们说它是处理触摸事件的接口。
(02) 返回值:返回true,表示触摸事件被它处理过了;或者,换句话说,表示它消费了触摸事件。否则,表示它没有消费该触摸事件。
onInterceptTouchEvent:它是拦截触摸事件的接口。
(01) 只有ViewGroup中才有该接口。如果ViewGroup不想将触摸事件传递给它的子View,则可以在onInterceptTouchEvent中进行拦截。
(02) 返回值:true,表示ViewGroup拦截了该触摸事件;那么,该事件就不会分发给它的子View或者子ViewGroup。否则,表示ViewGroup没有拦截该事件,该事件就会分发给它的子View和子ViewGroup。

3. OnTouchListener接口

OnTouchListener一个interface接口,它是在View中声明的。OnTouchListener中只包含了onTouch()函数。
那么,onTouch()和onTouchEvent()有什么相同和不同点呢?

相同点
onTouch()与onTouchEvent()都是用户处理触摸事件的API。

不同点
(01),onTouch()是View专门提供给用户的接口,目的是为了方便用户自己处理触摸事件。而onTouchEvent()是Android系统自己实现的接口。
(02),onTouch()的优先级比onTouchEvent()的优先级更高。
dispatchTouchEvent()中分发事件的时候,会先将事件分配给onTouch()进行处理,然后才分配给onTouchEvent()进行处理。 如果onTouch()对触摸事件进行了处理,并且返回true;那么,该触摸事件就不会分配在分配给onTouchEvent()进行处理了。只有当onTouch()没有处理,或者处理了但返回false时,才会分配给onTouchEvent()进行处理。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值