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等事件响应的研究相关推荐

  1. android gridview 按钮事件处理,Android TV gridview 的按键事件响应巧变 事件分发机制...

    在gridview点击事件之后,打log看了下, 看到gridview的onclick事件响应的竟然排在onkeyup之后,这造成100~200ms的延迟啊, 后来换了在其它响应事件里面截取,但是在o ...

  2. Android之常见事件响应的实现方式

    1.常见事件 (1)单击事件 onClickListener (2)长按事件 onLongClickListener (3)滑动事件 onTouchListener (4)键盘事件 onKeyList ...

  3. Android事件的响应,Android 开发事件响应之基于监听的事件响应

    Android 开发事件响应之基于监听的事件响应 本文将介绍Android 操作系统如何通过监听来实现对事件的响应. Android 开发事件响应之基于监听的事件响应 背景介绍 Android 开发事 ...

  4. Android EditText中插入图片并响应点击事件

    EditText中插入图片基本就是两种方法: 1,通过Html.fromHtml(..)来实现[mw_shl_code=java,true]eText.append(Html.fromHtml(&qu ...

  5. android onClickListener onLongClickListener事件冲突

    <!-- 最右边删除按钮 --><RelativeLayoutandroid:id="@+id/rly_cancel_app"android:layout_wid ...

  6. 【Android开发】三种方法实现Button点击事件响应

    目录 1.在xml中对onclick()进行指定方法 2.NEW一个OnClickListenner()接口实现 3.实现OnClickListener接口(Switch方法) Hello,你好呀,我 ...

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

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

  8. android onclick方法吗,Android中button的onClick事件几种方法

    Android中button的onClick事件几种方法 发布时间:2020-09-03 02:36:31 来源:脚本之家 阅读:100 作者:水桶前辈 Android中button的onClick事 ...

  9. Anroid View事件响应机制和ViewGroup的事件响应分发机制

    注:低版本的源码内容比高版本的源码简单,分析起来方便,但是高版本源码更为严密. View的事件响应机制 涉及2个方法dispatchTouchEvent和onTouchEvent 1.View的dis ...

最新文章

  1. python3.7如何安装库_Python3.7版库的安装以及常用方法(十分简单)
  2. Scrapy基本用法
  3. matlab编译器和程序发布
  4. 左神算法:将单链表的每K个节点之间逆序(Java版)
  5. (摘)Excel 2007查询操作中的函数应用
  6. 华为Y9 Prime 2019曝光:无刘海无水滴全面屏+升降前摄
  7. 基于JAVA+SpringBoot+Mybatis+MYSQL的仿天猫商城
  8. openwrt顶层Makefile分析-转
  9. Kafka-集群部署
  10. Tool:Adobe Photoshop
  11. 苹果手机编辑word_苹果手机自带了三个PDF功能!每一个都这么好用!你知道几个呢?...
  12. 读取EL1809模块输入信号
  13. 移动端web总结(一)——JDM项目总结
  14. CCF CSP 201609-2 火车购票(C++语言100分)[简单模拟题]
  15. 计算机无法自动排列,为什么我的电脑不能自动排列图标
  16. 深度学习之环境配置--配置d2lzh_pytorch包
  17. MYSQL安装配置详细
  18. SQL语句中:UNION与UNION ALL的区别
  19. SPA应用怎么进行SEO?
  20. Java设计一个雇员类,创建雇员类对象,统计雇员的出勤人数。

热门文章

  1. 简单 描述oracle 存储结构,下面的各选项中哪一个正确描述了
  2. mysql错误代码1045的解决方案_mysql错误代码1045的解决方案
  3. php 获取所有表,php – 获取所有插件的列表
  4. 前后落差大用什么词语_夸迪是什么“鬼”——爱上夸迪之心路历程
  5. Arduino门禁人机接口调试 Version 1.0
  6. 端口保护:如果你不把我当回事,我就会让你好看
  7. linux nat span端口镜像,端口镜像span、rspan实现数据检测
  8. Python开发服务器巡检系统,东拼西凑用python脚本登录web管理页面做巡检(未实现)...
  9. python多元线性回归模型_python – 使用Tensorflow的多元线性回归模型
  10. sql语句没错 mysql.data.dll类型的异常_未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。...