天天看点

OnTouch及OnlangClick的冲突解决

之前在做项目的时候,遇到了既要监听touch事件,又要监听langClick事件,但经过查看源代码,ontouch事件是触摸类事件的“鼻祖”,onclick和onlangclick都是在view中的ontouchEvent方法中触发的,而且我们的view复写ontouch方法或者设置了OnTouchListener后,我们的view就无法触发onclick或者onlangclick的事件。

      经过查看源代码,view类在dispatch touch event时,首先判断有没有设置OnTouchListener,如果有,则不会调用view类的ontouchEvent方法,所以导致onclick和onlangclick事件。

     于是,我找到了解决方案,在我们自己的OnTouchListener的ontouch回调方法中(或者在复写的ontouchEvent方法中),除了实现我们自己需要做的操作,还有在最后返回时,调用view类的ontouchEvent方法,这样我们的view就可以同时获得ontouch和onclick/onlangclick 的事件了。

public boolean onTouch(View v, MotionEvent event)
{

	switch (event.getAction())
	{
		case MotionEvent.ACTION_DOWN:
			break;
		case MotionEvent.ACTION_UP:
				
			break;
		case MotionEvent.ACTION_MOVE:
                                                        
                           break;
		case MotionEvent.ACTION_CANCEL:
					
        			break;
		default:
			break;
	}
	return v.onTouchEvent(event);
}