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的关系,根据汉语的意思了,可能会感觉到这两个事件会有关系。但是事实是他们之间的关系是没有关系,前面已经给出这两个事件产生的条件了,而且是充分条件,这足已说明这两个事件没关系了。

  • 相关阅读:
    一个简单的knockout.js 和easyui的绑定
    knockoutjs + easyui.treegrid 可编辑的自定义绑定插件
    Knockout自定义绑定my97datepicker
    去除小数后多余的0
    Windows Azure Web Site (15) 取消Azure Web Site默认的IIS ARR
    Azure ARM (1) UI初探
    Azure Redis Cache (3) 创建和使用P级别的Redis Cache
    Windows Azure HandBook (7) 基于Azure Web App的企业官网改造
    Windows Azure Storage (23) 计算Azure VHD实际使用容量
    Windows Azure Virtual Network (11) 创建VNet-to-VNet的连接
  • 原文地址:https://www.cnblogs.com/chenxibobo/p/14205278.html
Copyright © 2011-2022 走看看