首页 > 代码库 > onTouch与onClick冲突解决方法
onTouch与onClick冲突解决方法
1 view.setOnTouchListener(new OnTouchListener() { 2 3 @Override 4 public boolean onTouch(View v, MotionEvent event) { 5 // TODO Auto-generated method stub 6 switch(event.getAction()){ 7 case MotionEvent.ACTION_DOWN: 8 firstX = event.getX(); 9 firstY = event.getY();10 //这里不能 return true,否则会导致无法响应onClick11 break;12 case MotionEvent.ACTION_MOVE:13 lastX = event.getX();14 lastY = event.getY();15 16 //如果要处理滑动事件,要把事件设置为ACTION_CANCEL,否则会在滑动时触发onClick17 if(dispose move event){18 MotionEvent cancelEvent = MotionEvent.obtain(event); 19 cancelEvent.setAction(MotionEvent.ACTION_CANCEL|(event.getActionIndex()<< MotionEvent.ACTION_POINTER_INDEX_SHIFT));20 v.onTouchEvent(cancelEvent);21 //do something22 cancelEvent.recycle();23 //return true表示要处理move事件24 return true;25 }26 27 break;28 case MotionEvent.ACTION_UP:29 return false;30 31 }32 return v.onTouchEvent(event);33 }34 });
关键代码
1 MotionEvent cancelEvent = MotionEvent.obtain(event); 2 cancelEvent.setAction(MotionEvent.ACTION_CANCEL|(event.getActionIndex()<< MotionEvent.ACTION_POINTER_INDEX_SHIFT));3 v.onTouchEvent(cancelEvent);
MotionEvent.ACTION_CANCEL 不就可以实现取消操作为什么还要加上 |(event.getActionIndex()<< MotionEvent.ACTION_POINTER_INDEX_SHIFT) ?
主要是防止多点操作,这种情况下会进入 MotionEvent.ACTION_POINTER_* 而不是 MotionEvent.ACTION_*
onTouch与onClick冲突解决方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。