android对OnTouchListener、OnClickListener等事件响应的研究
2019独角兽企业重金招聘Python工程师标准>>>
前几天遇到一个小问题,就是给listview添加onItemClickListener、onItemLongClickListener、onTouchEvent三种事件的 时候,只执行了onTouchEvent事件,而其他的两个事件未执行,解决办法:在对应的onTouchEvent的action里面设置return false;当执行到该action的时候就会返回false,前两个事件就会执行了。解决方法很简单,为此还特意研究了一下View对事件响应的流程。
Android的各个View之间的关系是一颗树,下面的子View都是在父View的基础上建立的,可以看成子View叠加在父类的View上。下面我们来看一下两种不同情况的事件处理。
1、给同一个View设置了OnTouchEvent事件、OnClickListener事件与OnLongClickListener事件,当点击View的时候,事件的响应顺序是:
Touch事件的ACTION_DOWN -> ACTION_UP -> OnClick/OnLongClick。
该View是怎么响应这个点击动作的呢?
首先,该View会先响应ACTION_DOWN事件,并返回一个boolean值,这里有两种判断:
a:返回True,表示该View接受此按下动作,就是说这个点击动作的按下操作被中止,然后就是响应ACTION_UP事件。点击动作的按下操作被ACTION_DOWN接受之后就结束了,所以之后的OnClick/OnLongClick事件就不会响应了。
b:返回false,表示该View不接受此按下动作,响应完之后,按下操作继续往下发,之后是响应ACTION_UP事件,这里又有一个判断:
如果ACTION_UP事件返回True,表示ACTION_UP接受松开操作,松开操作中止;View会一直处于按下状态,之后View便会响应OnLongClick事件。
如果ACTION_UP事件返回false,表示ACTION_UP不接收松开操作,松开操作继续下发;因为按下与松开操作都没有被中止,所以之后View就会响应OnClick事件。
2、多个View之间的事件响应:
如果有多层View,一个layout布局,在此布局上放一个TextView,并将TextView的宽高设置为fill_parent(确保点击的是在TextVIew上)。给Activity与TextView都设置OnTouchListener事件。事件响应的顺序是先从顶层的View开始的。所以,当点击屏幕时(TextView所在区域的屏幕)。
TextView响应ACTION_DOWN,返回false,ACTION_DOWN继续下发,Activity响应ACTION_DOWN事件。如果返回true,表示ACTION_DOWN到TextView就被中止了,而不会继续往下被Activity捕获了。
ACTION_UP的响应方式有点不同,响应ACTION_UP的有两种条件,必须满足其一:
a、最下面一层(此处是Activity)。
b、其对应的ACTION_DOWN是终止点,即其ACTION_DOWN的返回值为true;
转载于:https://my.oschina.net/zhangjie830621/blog/186947
android对OnTouchListener、OnClickListener等事件响应的研究相关推荐
- android gridview 按钮事件处理,Android TV gridview 的按键事件响应巧变 事件分发机制...
在gridview点击事件之后,打log看了下, 看到gridview的onclick事件响应的竟然排在onkeyup之后,这造成100~200ms的延迟啊, 后来换了在其它响应事件里面截取,但是在o ...
- Android之常见事件响应的实现方式
1.常见事件 (1)单击事件 onClickListener (2)长按事件 onLongClickListener (3)滑动事件 onTouchListener (4)键盘事件 onKeyList ...
- Android事件的响应,Android 开发事件响应之基于监听的事件响应
Android 开发事件响应之基于监听的事件响应 本文将介绍Android 操作系统如何通过监听来实现对事件的响应. Android 开发事件响应之基于监听的事件响应 背景介绍 Android 开发事 ...
- Android EditText中插入图片并响应点击事件
EditText中插入图片基本就是两种方法: 1,通过Html.fromHtml(..)来实现[mw_shl_code=java,true]eText.append(Html.fromHtml(&qu ...
- android onClickListener onLongClickListener事件冲突
<!-- 最右边删除按钮 --><RelativeLayoutandroid:id="@+id/rly_cancel_app"android:layout_wid ...
- 【Android开发】三种方法实现Button点击事件响应
目录 1.在xml中对onclick()进行指定方法 2.NEW一个OnClickListenner()接口实现 3.实现OnClickListener接口(Switch方法) Hello,你好呀,我 ...
- android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)
ListView的主要有两种滑动事件监听方法,OnTouchListener和OnScrollListener 1.OnTouchListener OnTouchListener方法来自View中的监 ...
- android onclick方法吗,Android中button的onClick事件几种方法
Android中button的onClick事件几种方法 发布时间:2020-09-03 02:36:31 来源:脚本之家 阅读:100 作者:水桶前辈 Android中button的onClick事 ...
- Anroid View事件响应机制和ViewGroup的事件响应分发机制
注:低版本的源码内容比高版本的源码简单,分析起来方便,但是高版本源码更为严密. View的事件响应机制 涉及2个方法dispatchTouchEvent和onTouchEvent 1.View的dis ...
最新文章
- python3.7如何安装库_Python3.7版库的安装以及常用方法(十分简单)
- Scrapy基本用法
- matlab编译器和程序发布
- 左神算法:将单链表的每K个节点之间逆序(Java版)
- (摘)Excel 2007查询操作中的函数应用
- 华为Y9 Prime 2019曝光:无刘海无水滴全面屏+升降前摄
- 基于JAVA+SpringBoot+Mybatis+MYSQL的仿天猫商城
- openwrt顶层Makefile分析-转
- Kafka-集群部署
- Tool:Adobe Photoshop
- 苹果手机编辑word_苹果手机自带了三个PDF功能!每一个都这么好用!你知道几个呢?...
- 读取EL1809模块输入信号
- 移动端web总结(一)——JDM项目总结
- CCF CSP 201609-2 火车购票(C++语言100分)[简单模拟题]
- 计算机无法自动排列,为什么我的电脑不能自动排列图标
- 深度学习之环境配置--配置d2lzh_pytorch包
- MYSQL安装配置详细
- SQL语句中:UNION与UNION ALL的区别
- SPA应用怎么进行SEO?
- Java设计一个雇员类,创建雇员类对象,统计雇员的出勤人数。
热门文章
- 简单 描述oracle 存储结构,下面的各选项中哪一个正确描述了
- mysql错误代码1045的解决方案_mysql错误代码1045的解决方案
- php 获取所有表,php – 获取所有插件的列表
- 前后落差大用什么词语_夸迪是什么“鬼”——爱上夸迪之心路历程
- Arduino门禁人机接口调试 Version 1.0
- 端口保护:如果你不把我当回事,我就会让你好看
- linux nat span端口镜像,端口镜像span、rspan实现数据检测
- Python开发服务器巡检系统,东拼西凑用python脚本登录web管理页面做巡检(未实现)...
- python多元线性回归模型_python – 使用Tensorflow的多元线性回归模型
- sql语句没错 mysql.data.dll类型的异常_未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。...