当前位置: 首页 > news >正文

事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序

一直想弄清楚onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent的执行顺序,以及内部使用switch (event.getAction())中的执行顺序。趁这次机会赶紧弄清楚。

 

public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);
        Log.e(TAG, "onTouchEvent");
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            Log.e(TAG, "onTouchEvent_ACTION_DOWN");
            break;
        case MotionEvent.ACTION_MOVE:
            Log.e(TAG, "onTouchEvent_ACTION_MOVE");
            break;
        case MotionEvent.ACTION_UP:
            Log.e(TAG, "onTouchEvent_ACTION_UP");
            break;
        default:
            break;
        }
        Log.e(TAG, "onTouchEvent_return");
        return isOnTouchEvent;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        Log.e(TAG, "onInterceptTouchEvent");
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            Log.e(TAG, "onInterceptTouchEvent_ACTION_DOWN");
            break;
        case MotionEvent.ACTION_MOVE:
            Log.e(TAG, "onInterceptTouchEvent_ACTION_MOVE");
            break;
        case MotionEvent.ACTION_UP:
            Log.e(TAG, "onInterceptTouchEvent_ACTION_UP");
            break;
        default:
            break;
        }
        Log.e(TAG, "onInterceptTouchEvent_return");
        return isOnInterceptTouchEvent;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        super.dispatchTouchEvent(event);
        Log.e(TAG, "dispatchTouchEvent");
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            Log.e(TAG, "dispatchTouchEvent_ACTION_DOWN");
            break;
        case MotionEvent.ACTION_MOVE:
            Log.e(TAG, "dispatchTouchEvent_ACTION_MOVE");
            break;
        case MotionEvent.ACTION_UP:
            Log.e(TAG, "dispatchTouchEvent_ACTION_UP");
            break;
        default:
            break;
        }
        Log.e(TAG, "dispatchTouchEvent_return");
        return isDispatchTouchEvent;
    }

重写上面几个方法后。我们在LogCat中看看打印的结果。

一.isOnInterceptTouchEvent==true时。

1.isOnTouchEvent==true,isDispatchTouchEvent==true。

因为onInterceptTouchEvent返回true,这说明要拦截此事件,因此在同一个事件序列中该方法不会再次被调用。下同。

2.isOnTouchEvent==true,isDispatchTouchEvent==false。

3.isOnTouchEvent==false,isDispatchTouchEvent==true。

4.isOnTouchEvent==false,isDispatchTouchEvent==false。

二.如果isOnInterceptTouchEvent==false。

1.isOnTouchEvent==true,isDispatchTouchEvent==true。

因为onInterceptTouchEvent返回tfalse,这说明不拦截此事件,因此不调用onTouchEvent。下同。

 2.isOnTouchEvent==true,isDispatchTouchEvent==false。

 

3.isOnTouchEvent==false,isDispatchTouchEvent==true。

4.isOnTouchEvent==false,isDispatchTouchEvent==false。

 

转载于:https://www.cnblogs.com/tangZH/p/5931509.html

相关文章:

  • PetaPoco - 轻量级高性能的ORM框架(支持.NET Core)
  • jQuery基础:mouseeter( ) 与 mouseover( ) 区别
  • 为什么「教学相长」?
  • linux内核(kernel)版本号的意义
  • a+=b 是什么意思?
  • 模拟。。。 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C
  • 端口聚合配置
  • iOS 2D绘图详解(Quartz 2D)之概述
  • java JVM : Xms Xmx PermSize MaxPermSize 区别
  • [svc]后台运行程序screen or nohup
  • 配置 L3 agent - 每天5分钟玩转 OpenStack(99)
  • LayDate使用
  • Java|序列化异常StreamCorruptedException的解决方法
  • 再用python写一个文本处理的东东
  • C#泛型-模板特化
  • 【知识碎片】第三方登录弹窗效果
  • 10个最佳ES6特性 ES7与ES8的特性
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Babel配置的不完全指南
  • CSS盒模型深入
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • k8s 面向应用开发者的基础命令
  • mac修复ab及siege安装
  • MD5加密原理解析及OC版原理实现
  • mysql_config not found
  • MySQL用户中的%到底包不包括localhost?
  • Service Worker
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • Zsh 开发指南(第十四篇 文件读写)
  • 分类模型——Logistics Regression
  • 好的网址,关于.net 4.0 ,vs 2010
  • 记一次和乔布斯合作最难忘的经历
  • 开发基于以太坊智能合约的DApp
  • 开源地图数据可视化库——mapnik
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 力扣(LeetCode)56
  • 使用agvtool更改app version/build
  • 详解NodeJs流之一
  • 用jquery写贪吃蛇
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #define 用法
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (13)Hive调优——动态分区导致的小文件问题
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (多级缓存)多级缓存
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (转)ObjectiveC 深浅拷贝学习
  • (转)大型网站的系统架构
  • ..回顾17,展望18
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?