我有一个同时实现OnClickListener
和OnLongClickListener
的图片。在OnLongClickListener
按下(ACTION_DOWN
)时,我启动了一个计时器。我想在ACTION_UP
取消它。
现在,如果我为此图片实施OnTouchListener
,那么我会抓住ACTION_DOWN
进行正常点击。我只想抓住Long点击。
为什么不点击火ACTION_UP
事件?如何检测此事件并停止计时器。
如果您需要代码,我可以发布它,但我不认为它会对您有所帮助,因为代码中没有错误。
PS。我不能在任何特定时间或值停止计时器,因为这个长按不断增加另一个元素的值。此增加过程应仅在图像长按ACTION_UP
时停止。
答案 0 :(得分:9)
只需使用OnTouchListener并忘记OnLongClickListener。您可以通过检查坐标和按下的时间来检测长按,您可以通过OnTouch()传递MotionEvent对象中的所有信息。
1-要检查坐标,请使用来自MotionEvent的getX()和getY()以及来自ImageView容器的getDrawingRect()。
2-要检查按下的时间,请使用getEventTime(),在ACTION_DOWN中存储第一次,然后在ACTION_UP事件中通过减去时间进行计算。长按一下你可以假设800mS。