gpt4 book ai didi

android - 如何检测创建 Activity 时已经存在的屏幕触摸?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:54 26 4
gpt4 key购买 nike

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

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

第二部分:然后我打开一个新 Activity ,实际上圈出雨滴并告诉用户“擦掉这个雨滴”。新的 Activity 打开很好,我可以在任何地方成功地画圆圈。

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

我如何获得初始媒体,将我带到这里的媒体仍然存在?它必须是某种轮询 API,而不是事件,因为我真的想要当前状态并且我知道事件已经被吸收了。需要明确的是,在我第一次将手指从屏幕上移开之前,dispatchTouchEvent() 不会发出任何事件(即使关闭也不会产生可检测的事件)。

(我可以从之前的 Activity 中获取坐标并通过它...但是麻烦的是雨滴可能会在 10 秒的等待期间四处滑动。我宁愿 Activity 在工作中自给自足。)

最佳答案

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

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

接收触摸事件的 View 将继续这样做,直到这些事件之一发生:

  1. onTouchEvent() 方法返回 false。如果它在任何时候返回 false,它将停止接收所有触摸事件。也就是说,如果您在 ACTION_MOVE 操作中返回 false,您将不会收到 ACTION_UP 操作。

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

  3. 您收到一个 ACTION_UP,这意味着最后一个触摸手指从 View 上抬起。

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

关于android - 如何检测创建 Activity 时已经存在的屏幕触摸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31530707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com