zoukankan      html  css  js  c++  java
  • OnTouchListener,OnClickListener和OnLongClickListener的关系

     

    在OnTouchListener事件里有MotionEvent.ACTION_DOWN,MotionEvent.ACTION_UP和MotionEvent.ACTION_MOVE三个事件,我们在这里只讨论MotionEvent.ACTION_DOWN,MotionEvent.ACTION_UP,与MOVE无关。在下面的文章中我们简称MotionEvent.ACTION_DOWN为TouchDown,简称MotionEvent.ACTION_UP为TouchUp。我们还知道Android有消化事件这个概念,在setOnTouchListener函数中如果是TouchDown我们返回true,在下文中我们称消化了TouchDown,返回false则没消化,TouchUp同理。

    下面我们说明关系和证明(在用程序证明时每次运行都以 程序----操作----结果的顺序给出)。

    1)OnTouchListener和OnClickListener的关系

    关系:产生OnClick事件的条件(充要条件)是;TouchDown和TouchUp事件都没有被消化。事件处理的过程是:先处理TouchDown,之后处理TouchUp,如果这两个事件都没被消化,则处理OnClick事件。

    程序结果:由于这个关系比较简单就不上图了。程序分4种情况分别为:

    a)程序:消化TouchDown,不消化TouchUp------操作:单击按钮------结果:不产生OnClick事件

    b)程序:不消化TouchDown,消化TouchUp------操作:单击按钮------结果:不产生OnClick事件

    c)程序:消化TouchDown,消化TouchUp------操作:单击按钮------结果:不产生OnClick事件

    d)程序:不消化TouchDown,不消化TouchUp----操作:单击按钮----结果:产生OnClick事件

    2)OnTouchListener和OnLongClickListener的关系

    关系:产生OnLongClick事件的条件(充要条件)是;在产生TouchDown事件,并且该TouchDown没有被消化,之后500毫秒内没有响应到TouchUp,则产生OnLongClick事件。

    程序结果:对运行情况按TouchDown是否被消化,TouchUp是否被消化,我的操作是长按还是短按可以分为8种运行情况,在这里就不一一列举了,按我们的需要进行分类列举。

    a)如果消化TouchDown,按照前面给出的关系,则不可能产生OnLongClick事件。事实是同过我的测试,在这个条件下我对TouchUp是否被消化和操作是长按还是短按4种情况都进行测试,结果都是不产生OnLongClick事件。

    b)不消化TouchDown,下面对TouchUp是否被消化又分为两种情况:

    bx)不消化TouchDown,不消化TouchUp,对长按和短按分别测试,根据前面给出的关系我们可以推断出长按产生OnLongClick,短按不产生OnLongClick

    bx1)程序:不消化TouchDown,不消化TouchUp,----操作:短时间单击按钮----结果:不产生OnLongClick事件

    bx2)程序:不消化TouchDown,不消化TouchUp,----操作:长时间单击按钮----结果:产生OnLongClick事件

    测试结果满足我们的推断。

    by)不消化TouchDown,消化TouchUp,对长按和短按分别测试,根据前面给出的关系我们可以推断出不论长按还是短按,都会产生OnLongClick事件。

    by1)程序:不消化TouchDown,消化TouchUp,----操作:短时间单击按钮----结果:产生OnLongClick事件

    by2)程序:不消化TouchDown,消化TouchUp,----操作:长时间单击按钮----结果:产生OnLongClick事件

    测试结果满足我们的推断。

    测试完全符合我们的预期,所以前面给出的关系是对的。

    补充:OnClickListener和OnLongClickListener的关系,根据汉语的意思了,可能会感觉到这两个事件会有关系。但是事实是他们之间的关系是没有关系,前面已经给出这两个事件产生的条件了,而且是充分条件,这足已说明这两个事件没关系了。

  • 相关阅读:
    使用Ansible连接AWS EC2
    centos7 常用工具包安装
    基于redis的分布式ID生成器
    使用Docker的macvlan为容器提供桥接网络及跨主机通讯
    小程序使用腾讯视频
    切换 Python2 Python3
    PHP字符串替换
    小程序常用操作,if,for,跳转,弹出提示
    小程序订单核销的思路
    PHP 批量删除的实现
  • 原文地址:https://www.cnblogs.com/chenxibobo/p/14205278.html
Copyright © 2011-2022 走看看