0

我有一个同时实现OnClickListener和的图像OnLongClickListener。在OnLongClickListenerat 按下 ( ACTION_DOWN) 时,我启动了一个计时器。我想取消它ACTION_UP

现在,如果我OnTouchListener为这个图像实现,那么我会捕捉ACTION_DOWN到正常的点击。我只想捕捉长点击。

为什么长按不触发ACTION_UP事件?如何检测此事件并停止计时器。

如果您需要代码,我可以发布它,但我认为它不会对您有所帮助,因为代码中没有错误。

PS。我无法在任何特定时间或值停止计时器,因为长按会不断增加另一个元素的值。这个增加过程应该只在图像长按时停止ACTION_UP

4

1 回答 1

9

只需使用 OnTouchListener 并忘记 OnLongClickListener。您可以通过检查坐标和按下时间来检测长按,您在 OnTouch() 传递的 MotionEvent 对象中拥有所有这些信息。

1- 要检查坐标,请使用 MotionEvent 中的 getX() 和 getY() 以及 ImageView 容器中的 getDrawingRect()。

2- 要检查按下的时间,请使用 getEventTime(),将第一次存储在 ACTION_DOWN 中,然后通过减去 ACTION_UP 事件中的时间来计算。您可以假设长按 800 毫秒。

于 2011-08-19T18:44:47.800 回答