当前位置: 首页 > 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#泛型-模板特化
  • 【Leetcode】101. 对称二叉树
  • JavaScript-如何实现克隆(clone)函数
  • Docker容器管理
  • docker容器内的网络抓包
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • java8-模拟hadoop
  • Java方法详解
  • LintCode 31. partitionArray 数组划分
  • Linux后台研发超实用命令总结
  • Linux下的乱码问题
  • PHP变量
  • php面试题 汇集2
  • Redis中的lru算法实现
  • sessionStorage和localStorage
  • SpringBoot几种定时任务的实现方式
  • tensorflow学习笔记3——MNIST应用篇
  • 编写高质量JavaScript代码之并发
  • 关于List、List?、ListObject的区别
  • 基于游标的分页接口实现
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 一文看透浏览器架构
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $.ajax()
  • (1)Android开发优化---------UI优化
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (离散数学)逻辑连接词
  • (六)vue-router+UI组件库
  • (论文阅读30/100)Convolutional Pose Machines
  • (一)为什么要选择C++
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net操作Excel出错解决
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET下ASPX编程的几个小问题
  • [20181219]script使用小技巧.txt