android onClick,onLongClick,onTouch事件机制和触发顺序
2013-08-16 11:55
579 查看
如果存在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事件中,所以有时候两个事件有时会同时执行,怎么解决这样的冲突了,本人给一种很笨的方法,代码如下:
所以要先从 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事件 }
相关文章推荐
- Android中事件传递机制的总结(onTouch、onClick、onLongClick等)
- Android onClick与onLongClick事件触发的问题[转]
- 浅谈Android onClick与onLongClick事件触发的问题
- Android事件传递dispatchTouchEvent,ontouch,onInterceptTouchEvent,onTouchEvent,onClick,onLongClick,
- android OnTouch-->OnLongClick-->OnClick事件顺序
- Android的事件分发onInterceptTouchEvent与onTouchEvent、OnClickListener、OnLongClick
- Android onTouchEvent, onClick及onLongClick的调用机制
- Android onTouchEvent, onClick及onLongClick的调用机制
- Android onTouchEvent, onClick及onLongClick的调用机制
- Android onTouchEvent, onClick及onLongClick的调用机制
- Android onTouchEvent, onClick及onLongClick的调用机制
- onTouch,onClick,onLongClick事件触发分析
- Android onTouchEvent, onClick及onLongClick的调用机制
- Android OnTouchEvent和OnClick、OnLongClick、OnTouch、TouchDelegate关系
- Android onTouchEvent, onClick及onLongClick的调用机制
- Android onLongClick事件触发的问题
- ANDROID ONTOUCHEVENT, ONCLICK及ONLONGCLICK的调用机制
- Android onTouchEvent, onClick及onLongClick的调用机制
- Android onTouchEvent, onClick及onLongClick的调用机制
- Android onTouchEvent, onClick及onLongClick的调用机制