除了最常用的点击事件(Click),还有一个长按事件(LongPress),比如长按弹出复制、粘贴的菜单,长按弹出自定义View等等。这篇文章我们就来看看Android源码中是如何实现长按事件的。
既然是手势动作,那就逃不过onTouchEvent。直接找到View代码中的onTouchEvent。
这个时间里面,首先会检查几个是否可点击的状态,比如点击、长按、环境点击(触笔、鼠标右键等)。
final boolean clickable = ((viewFlags & CLICKABLE) == CLICKABLE
|| (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)
|| (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE;
然后还会判断是否可用,以及是否由其它Touch的代理去处理Touch事件。
if ((viewFlags & ENABLED_MASK) == DISABLED)
......
if (mTouchDelegate != null)