之前在做项目的时候,遇到了既要监听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);
}