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

And*_*rs8 5 android

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

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

第二部分:那么我打开一个新的活动,然后绕着降雨圈告诉用户"擦掉这个雨滴".新活动打开正常,我可以成功地在任何地方画圈子.

麻烦的是,新活动没有收到第一次按下的任何触摸事件......尚未停止的长按.没有得到"新的"ACTION_DOWN是可以理解的......我已经抓住了.如果我抬起手指,也没有ACTION_UP.提起最初的新闻,每天工作得很好:我可以点击屏幕,瞬间一个圆圈围绕当场绘制,如果我拖我的手指会动,所以没有问题.

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

(我可以从之前的活动中获取坐标并通过它......但是在10秒的等待期间,雨滴可能会滑落.我宁愿在完成工作时自行完成活动.)

Dee*_*eeV 2

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

您可以决定的方法是使用 Framgents API 或简单地在正在触摸的视图之上打开一个新视图。

接收触摸事件的视图将继续这样做,直到发生以下事件之一:

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

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

  3. 您会收到一个 ACTION_UP ,这意味着最后一个触摸手指从视图中抬起。

只要前面的视图返回false大多数默认情况下执行的操作,后面的视图将始终接收触摸事件。因此,如果您只是在记录触摸的视图之上弹出一个新视图,只需继续记录并将绘制坐标传递到顶部视图即可。