【问题标题】:Multi touch inconsistency across devices/Android versions跨设备/Android 版本的多点触控不一致
【发布时间】:2014-02-16 12:43:32
【问题描述】:

我正在尝试实现一个 Android 多点触控应用程序,但我在两个不同的设备(运行 Android 2.3.3 的三星 Galaxy Ace 和运行 Android 4.2.2 的 FairPhone)上观察到不一致的行为。

以下是相关代码:

@Override
public boolean onTouchEvent(MotionEvent event){

    int action = MotionEventCompat.getActionMasked(event);
    int index = MotionEventCompat.getActionIndex(event);
    int id = MotionEventCompat.getPointerId(event, index);

    if (action == MotionEvent.ACTION_DOWN || action == MotionEventCompat.ACTION_POINTER_DOWN) {
        Log.d("FOO", "DOWN (" + id + ")");
    } else if (action == MotionEvent.ACTION_UP || action == MotionEventCompat.ACTION_POINTER_UP) {
        Log.d("FOO", "UP (" + id + ")");    
    }

    return true;
}

使用此代码和手势“1 指向下,2 指向下,1 指向上,2 指向上”,这是 Galaxy Ace 上的日志输出:

DOWN (0)
DOWN (1)
UP (0)
UP (1)

这是我所期望的。然而,下面是 FairPhone 上相同手势序列的输出:

DOWN (0)
DOWN (1)
UP (1)
UP (0)
DOWN (1)
UP (1)

因此,FairPhone 正在发出某种与实际手势不对应的伪“ID 切换”事件。

有没有办法实现与 Android 设备和版本无关的一致事件流?理想情况下,事件应该对应于实际的客人(即没有伪事件)。

编辑:我也很高兴至少知道其他 Android 设备/版本会产生什么样的事件,即上面列出的这些序列之一是否可以被视为“正确”的序列。

【问题讨论】:

  • FairPhone 的行为至少与其自身一致吗?每次都发生同样的奇怪事件吗?
  • 是的,这两款手机的 w.r.t 似乎是一致的。他们的行为。
  • 刚刚使用 Nexus 5 和 Android 4.4 进行了测试。它给我的输出和你的 Ace 一样,所以我不知道为什么 Fairphone 会这样做。我可以说它 obv 不是 Android 版本。
  • @tritop:感谢您的意见!

标签: android multi-touch


【解决方案1】:

您可以尝试以下其他一些方法来帮助进一步诊断:

  1. 切换发生在什么时间点?这可以通过记录ACTION_UPACTION_MOVE 来完成。寻找突然的跳跃。
  2. 查看一些历史数据 (getHistoricalX(int pointerIndex, int pos)。看看是否有突然的跳跃。
  3. 尝试删除 MotionEventCompat 调用,直接调用索引。没有人使用 pre-Eclair 了,没有理由继续使用兼容功能。

不过,最重要的是,预期的行为与您在 Galaxy Ace 中看到的一样。在我看来,您在 FairPhone 中发现了一个错误。我不确定您要花费多少工作来调试它,但如果您愿意,可以通过我上面提供的步骤找到解决方法。

【讨论】:

  • 但他写道,它适用于 2.3.3,奇怪的行为是适用于 4.2.2 Fairphone(虽然它也适用于 4.4 Nexus)。这使得它非常有趣,因为它可能的罪魁祸首范围如此之广。
  • 感谢您的意见。它看起来确实是 FairPhone 特有的问题,因此我们可能会尝试针对该平台使用解决方法。
【解决方案2】:

这可能基于 OEM,因为它还取决于设备的硬件。 OEM 实施的准确性和方式(触摸功能)发挥着重要作用。正因为如此,我们经常发现所有设备的触摸系统在响应性、准确性、平滑度等方面都不相同。

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2020-05-27
    • 2020-12-19
    • 2023-03-15
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多