android onClick,onLongClick,onTouch事件机制和触发顺序

如果存在onTouch事件 肯定是要先执行onTouch事件,关键是看ontouch事件里面各个动作的返回值,他们决定了什么时候执行onClick事件和onLongClick事件;

      所以要先从 OnTouch事件里面的ACTION_DOWN事件说起,他返回的是一个boolean值

     有两种情况


    (1)如果返回值 为true;

             表示该View接受此按下动作,就是说这个点击动作的按下操作被中止,然后就是响应ACTION_UP事件。点击动作的按下操作被ACTION_DOWN


接受之后就结束了,所以之后的OnClick/OnLongClick事件就不会响应了。


   (2)如果返回值 为false;

表示该View不接受此按下动作,响应完之后,按下操作继续往下发,之后是响应ACTION_UP事件,这里又有一个判断:


如果ACTION_UP事件返回True,
表示ACTION_UP接受松开操作,松开操作中止;View会一直处于按下状态,之后View便会响应OnLongClick事件。


如果ACTION_UP事件返回false,
表示ACTION_UP不接收松开操作,松开操作继续下发;因为按下与松开操作都没有被中止,所以之后View就会响应OnClick事件。


 那么问题就来了,因为onClick事件本身就反生在onTouch事件中,所以有时候两个事件有时会同时执行,怎么解决这样的冲突了,本人给一种很笨的方法,代码如下:


 
public boolean onTouch(View v, MotionEvent event) { 
  //down事件
  if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      x1 = event.getX(); 
      y1 = event.getY(); 
  } 
  //up事件
  if (event.getAction() == MotionEvent.ACTION_UP) { 
     x2 = event.getX(); 
     y2 = event.getY(); 
    if (Math.abs(x1 - x2) < 6) { 
       return false;// 距离较小,当作click事件来处理 
    } 
   if(Math.abs(x1 - x2) >60){ // 真正的onTouch事件 
      } 
  } 
  return true;// 返回true,不执行click事件 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值