onClick、onTouch、onTouchEvent、onL

2021-01-18  本文已影响0人  笔记本65

设置OnTouchListener:onTouch方法返回false时,onTouch方法及View的onTouchEvent方法依次被调用;onTouch方法返回true时,只调用onTouch方法,onTouchEvent方法不再被调用

设置OnTouchListener后:onTouch方法返回false,不影响OnClickListener及OnLongClickListener的触发;onTouch方法返回true时,OnClickListener及OnLongClickListener不再触发

当只把onTouchEvent 直接返回true:拦截了onClick、OnLongClick事件

当只把onTouchEvent 直接返回false:截了onClick、OnLongClick事件,而且拦截了ACTION_MOVE、ACTION_UP事件

OnClickListener的触发条件是手指从触屏抬起;OnLongClickListener的触发条件是按下触屏且停留一段时间(500ms)

onLongClick方法返回false不影响OnClickListener的触发;onLongClick方法返回true,OnClickListener不再触发

注意:根据官方的ui-events

onTouch():此方法返回一个布尔值,指示监听器是否处理完此事件。重要的是,此事件可以拥有多个分先后顺序的操作。因此,如果在收到 down 操作事件时返回 false,则表示您并未处理完此事件,而且对其后续操作也不感兴趣。因此,您无需执行事件内的任何其他操作,如手势或最终的 up 操作事件。

但实际上当onTouch,down事件返回false,onTouch仍然可以收到move和up事件

这点跟android官方声称的不一致,本人测试过跟参考的文章答案一致:onClick、onTouch、onTouchEvent的调用_火星男孩的分享空间-CSDN博客

最后,这些事件的优先级如下:OnTouch>onTouchEvent>onLongClick>onClick

上一篇下一篇

猜你喜欢

热点阅读