热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

onInterceptTouchEvent()和onTouchEvent()调用关系

2019独角兽企业重金招聘Python工程师标准在ViewGroup里覆写了onInterceptTouchEvent()方法,就可以对各种touch事件加以拦

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在ViewGroup里覆写了onInterceptTouchEvent()方法,就可以对各种touch事件加以拦截。但是touch事件在onInterceptTouchEvent()和onTouchEvent以及各个childView间的传递机制完全取决于onInterceptTouchEvent()和onTouchEvent()的返回值。

  1. down事件首先会传递到onInterceptTouchEvent()方法。该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后:

    (1)return false,那么后续的move, up等事件将继续会先传递给该ViewGroup,之后才和down事件一样传递给最终的目标view的onTouchEvent()处理。

    (2)return true,那么后续的move, up等事件将不再传递给onInterceptTouchEvent(),而是和down事件一样传递给该ViewGroup的onTouchEvent()处理,注意,目标view将接收不到任何事件。 

  2. 如果最终需要处理事件的view的onTouchEvent()返回了false,那么该事件将被传递至其上一层次的view的onTouchEvent()处理。 

  3. 如果最终需要处理事件的view 的onTouchEvent()返回了true,那么后续事件将可以继续传递给该view的onTouchEvent()处理。


实验:

 
             

  1. onInterceptTouchEvent()处理down事件均返回false,onTouchEvent处理事件均返回true:

    LayoutView1 : onInterceptTouchEvent  action :  ACTION_DOWN

    LayoutView2 : onInterceptTouchEvent  action :  ACTION_DOWN

    MyTextView : onTouchEvent  action :  ACTION_DOWN

    LayoutView1 : onInterceptTouchEvent  action :  ACTION_MOVE

    LayoutView2 : onInterceptTouchEvent  action :  ACTION_MOVE

    MyTextView onTouchEvent  action :  ACTION_MOVE

    这是最常见的情况,onInterceptTouchEvent并没有做任何改变事件传递时序的操作,效果上和没有重写该方法一样。各种事件的传递本身是自底向上的,次序:LayoutView1 -> LayoutView2 -> MyTextView. 在onInterceptTouchEvent均返回false时,LayoutView1 和 LayoutView2 的onTouchEvent并不会接收到事件,而是最终传递给了MyTextView.

  2. LayoutView1 的onInterceptTouchEvent处理down事件返回true,MyTextView的onTouchEvent事件返回true:

    LayoutView1 : onInterceptTouchEvent  action :  ACTION_DOWN

    LayoutView1 : onTouchEvent  action :  ACTION_DOWN

    LayoutView1 : onTouchEvent  action :  ACTION_MOVE

    LayoutView1 : onTouchEvent  action :  ACTION_MOVE

    LayoutView1  : onTouchEvent  action :  ACTION_UP

    LayoutView1在拦截第一次down事件时return true,所以后续事件(包括第一次的down)将由LayoutView1本身处理,事件不再传递下去。

  3. LayoutView1,LayoutView2的onInterceptTouchEvent处理down事件返回false,MyTextView的onTouchEvent事件返回false,LayoutView2的onTouchEvent事件返回true

    LayoutView1 : onInterceptTouchEvent  action :  ACTION_DOWN

    LayoutView2 : onInterceptTouchEvent  action :  ACTION_DOWN

    MyTextView : onTouchEvent  action :  ACTION_DOWN

    LayoutView2 : onTouchEvent  action :  ACTION_DOWN

    LayoutView1 : onInterceptTouchEvent  action :  ACTION_MOVE

    LayoutView2 : onTouchEvent  action :  ACTION_MOVE

    LayoutView1 : onInterceptTouchEvent  action :  ACTION_MOVE

    LayoutView2 : onTouchEvent  action :  ACTION_MOVE



转:https://my.oschina.net/u/1038977/blog/228754



推荐阅读
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 在维护公司项目时,发现按下手机的某个物理按键后会激活相应的服务,并在屏幕上模拟点击特定坐标点。本文详细介绍了如何使用ADB Shell Input命令来模拟各种输入事件,包括滑动、按键和点击等。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 开发笔记:2020 BJDCTF Re encode
    开发笔记:2020 BJDCTF Re encode ... [详细]
  • 本文介绍了如何通过设置背景形状来轻松地为 Android 的 TextView 添加圆形边框。我们将详细讲解 XML 代码的配置,包括圆角、描边和填充等属性。 ... [详细]
author-avatar
手机用户2602925213
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有