[置顶] onTouch返回true和false的区别,如何解决onTouch和onClick冲突
2017-02-07 11:41
579 查看
在开发中,我们会遇到某个图标可拖动的需求,我们会同时使用到onClick和onTouch事件,这个时候onClick和onTouch会发生冲突。 |
mIvSendCash.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
mIvSendCash.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
onTouch监听返回false和ture,主要有两种情况:
第一种情况:单独使用setOnTouchListener 第二种情况:se 4000 tOnTouchListener和setOnclickListener一起使用(不建议一起使用,可以将点击事件放在up中) |
Android 的触摸事件分为两类:1、down - up 2、down-move-up ,所谓的down就是按下手指,move就是移动手指,up就是松开手指 我们使用手机,每次点击屏幕的时候,都会触发这两种事件之一:1、按下手指 ,然后松开手指 2、按下手指,移动,然后松开手指。这个是时候我们就可以解释一件事了,平时我们点击某个按钮,必须是松开手指才会跳转,并且在此期间,你手指滑动到按钮外,也不会触发点击事件。 |
Android中把触摸事件封装成了一个类MotionEvent,用户的一次点击、触摸或者滑动都会产生一系列的MotionEvent 这个类的内容很简单,就两个东西:事件类型+坐标xy 事件类型有四种 MotionEvent.ACTION_DOWN 表示用户的手指刚接触到屏幕 MotionEvent.ACTION_MOVE 表示用户的手指正在移动 MotionEvent.ACTION_UP 表示用户的手指从屏幕上抬起 Cancel |
首先分析第一种情况,单独使用setOnTouchListener,无setOnclickListener
mCustomerServiceSpace.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
LogUtils.e("ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:
LogUtils.e("ACTION_MOVE");
break;
case MotionEvent.ACTION_UP:
LogUtils.e("ACTION_UP");
break;
}
return false;
}
});
onTouch为false的日志执行情况:
onTouch为true的日志执行情况:
通过日志发现,为false的时候,只会执行down方法,不会执行move和up.只有在true的时候,三个都会执行。
第二种情况:setOnTouchListener和setOnclickListener一起使用(不建议)
当setOnTouchListener和setOnclickListener一起使用,onTouch为true,则不会执行onClick方法,为false的才会执行onClick方法。无论是true还是false,down,move,up这三个方法都会执行
综合以上,解决onClick和onTouch冲突,在setOnTouchListenenr中返回true,并将点击事件放在up方法中。监测move事件,判断是否发生x或y轴的位移,用weatherMove记录状态,在up方法中weatherMove为false的时候执行onclick方法
相关文章推荐
- 如何解决ViewFlipper的onClick和onTouch的冲突事件
- Android 中 onTouch 和OnClick 冲突的处理(onTouchEvent返回true时与onclick冲突)
- 如何高效的判断数组中是否存在至少两个相同的数值,存在返回true,不存在返回false
- (14)Android监听时return 返回的false与true的区别
- DFS中如何一找到true就返回true, 其他返回false
- onTouch和onTouchEvent以及onClick的顺序,有什么区别,又该如何使用?
- 在TreeView 控件上,如果双击任何一个节点的checkbox 只会收到一次After_Check事件 但是check属性变化两次(从false到true 再从true到false),请问该如何解决,谢谢!
- 事件处理方法返回值 return true和false地区别
- 记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。
- Android中onTouch方法的执行过程以及和onClick执行发生冲突的解决办法
- 解决Myeclipse10中使用javascript验证form表单,返回true(false)不支持的问题
- andorid中基于回调事件传播返回true与false的区别
- 事件之onTouch方法的执行过程 及和 onClick执行发生冲突的解决办法
- [置顶] 通过字段返回信息进行文本渲染(字段false或者true,显示文本内容)
- [置顶] bodyParser.urlencoded 中设置 extended 为 true 和为 false 有什么区别
- Android之如何解决popupWindow(pw.setFocusable(true))按返回键和menu键退出
- android onKeyDown返回true与false区别
- android返回键监听中return false,return true的区别
- Android中onTouch方法的执行过程以及和onClick执行发生冲突的解决办法
- 浅析Android的setOnTouchListener的返回值是false和true的区别