如何检测创建活动时已存在的屏幕触摸?

时间:2015-07-21 04:59:52

标签: android

我有一个在所有条件下都可以在户外使用的应用。这些是运行Android 2.1的B& N Nook平板电脑。它们具有光学触摸检测功能,而不是压力,因此屏幕上的大雨滴可以“禁用”设备,因为它被检测为按下,然后没有检测到所有其他按下。

第一部分:在使用的活动中,我手动检测长(10秒)屏幕按压,与开始阻塞按压的雨滴一致。我为此使用了dispatchTouchEvent(),没关系。

第二部分:然后我打开一个新的活动,实际上围绕着雨滴并告诉用户“擦掉这个雨滴”。新活动打开正常,我可以随心所欲地画圈子。

问题是新活动没有收到第一次按下的任何触摸事件......尚未停止的长按。没有得到“新的”ACTION_DOWN是可以理解的......我已经抓住了。如果我抬起手指,也没有ACTION_UP。 提升初始按下后,每个工作正常:我可以点击屏幕,立即在该点周围绘制一个圆圈,如果我拖动手指它会移动,所以没有问题。

我如何获得首字母新闻,那个带我到这里的人仍然存在?它必须是某种轮询API,而不是事件,因为我真的想要当前的状态,我知道事件已经被吸了。要清楚的是,在我第一次将手指从屏幕上移开之前,dispatchTouchEvent()中没有任何事件发生(即使关闭也不会产生可检测的事件)。

(我可以抓住先前活动的坐标并传递它......但是在10秒的等待期间,雨水的下降可能会滑落。我宁愿活动在工作中自成一体。)

1 个答案:

答案 0 :(得分:2)

我不确定你能不能(尽管我从未尝试过)。我很确定一旦打开新活动,触摸事件就会被取消。

您可以决定采用的方法是使用Framgents API,或者只是在被触摸的视图之上打开一个新视图。

接收触摸事件的视图将继续这样做,直到其中一个事件发生:

  1. 方法onTouchEvent()返回false。如果它在任何时候返回false,它将停止一起接收触摸事件。这意味着,如果您在ACTION_MOVE操作中返回false,则会收到ACTION_UP操作。

  2. 您收到一个表示手势已结束的ACTION_CANCEL。通常这意味着触摸离开了视图边界,但可能有很多原因。

  3. 您收到一个ACTION_UP,表示最后一根手指从视图中抬起。

  4. 后面的视图将始终接收触摸事件,只要前面的视图返回false以执行默认情况下最常执行的操作。因此,如果您只是在视图顶部弹出一个新视图来记录触摸,只需保持录制并将绘制坐标传递到顶部视图。