• 【Android学习笔记】onInterceptTouchEvent()、onTouchEvent()


    一、资源:

    MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序

    ANDROID事件触发机制,针对于由于触摸(Touch)而触发的事件。

    二、重点

    • 首先要明确onInterceptTouchEvent()这个方法只针对于ViewGroup,事件传到ViewGroup一般先触发onInterceptTouchEvent(),View是没有这个方法的
    • 具体传递的流程见资源1,很详细,对理解很有帮助
    • onInterceptTouchEvent()改变事件传递的方向
      • false->下一个对象
      • true->本对象
    • onTouchEvent() 用于处理事件,返回值决定当前控件是否消费(consume)了这个事件。
      • false->继续下一步处理
      • true->已经消费,不继续处理

    三、问题思考

    1、是不是无论哪种情况下,最后一个发生的onTouchEvent()的返回值均为true?

    我做了试验,onTouchEvent()和onTouchEvent()均返回false情况,一个滑动手势只捕捉到了ACTION_DOWN

    所以我认为android应该是有个机制,让顶部有效的onTouchEvent自定返回true,按照资源1的描述看来,此后的时间信息都直接传给了最顶部的有效onTouchEvent()处理了。

    若顶部有效的onTouchEvent自定返回false的话,那么开始的信息得不到消费,比如Action_DOWN,那后面的动作也没办法触发啊!


    2、我感觉onInterceptTouchEvent()其实只能处理Action_DOWN,因为我觉得问题1正确的话,此后的Action_UP,Action_MOVE都会被最后一个有用的onTouchEvent截取?

    理由同问题描述,信息最后都汇总到返回true的onTouchEvent哪里,onInterceptTouchEvent()根本没有机会啊。

    但是在一些程序中,我确实看到了onInterceptTouchEvent()截取了ACTION_MOVE,ACTION_UP等操作,如何实现的,不解!!

    3、实现左右两个屏幕的切换

    “我研究了下。 需要往 screen 加 onclick事件,才能两个屏幕这样切换。 没弄懂onInterceptTouchEvent。 为什么要加 onclick呢,因为如果不加,那么 onInterceptTouchEvent return false 也是直接执行 onTouchEvent 而不是继续执行 onInterceptTouchEvent 如果加了onclick,那么 onInterceptTouchEvent return false 会直接执行 onInterceptTouchEvent。 求解答。”

    首先得明确onInterceptTouchEvent()是ViewGroup的方法,不是View的方法!
    前半句好理解:设当前ViewGroup称为Parent,点击的子View为Child,
    所以就算 onInterceptTouchEvent return false它也只能触发Child和Parent的onTouchEvent, 你那个时候Parent.onTouchEvent返回的应该也是true,此后的动作都直接传到Parent.onTouchEvent

    后半句无法理解,onclick在onTouchEvent中的ACTION_UP实现(参见下一篇),如果问题1的成立,那么后面的ACTION_MOVE,ACTION_UP都传不到非顶层的函数,所以说问题1是症结所在!!

  • 相关阅读:
    Java线程基础(二)
    Java线程基础(一)
    泛型集合List的详细用法
    Java中日期格式(String、Date、Calendar)的相互转换
    重写Java中包装类的方法
    Java的集合框架(第一次小结)
    node.js 调用mysql 数据库
    win10 系统解决mysql中文乱码问题
    vue-echarts图表
    文件上传的几个例子
  • 原文地址:https://www.cnblogs.com/hundan/p/2155442.html
Copyright © 2020-2023  润新知