【发布时间】: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