我以为捏总是会触发MotionEvent.ACTION_POINTER_UP,但是对于至少两个经过测试的平板电脑设备上的应用,这种情况只会发生大约50%的时间(变化很大)。它似乎是随机的。我不知道如何捏合它。
该代码非常简单,因为下面是有关活动的重写方法:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction())
{
...
case MotionEvent.ACTION_POINTER_UP:
Log.d("Debug", "ACTION_POINTER_UP triggered");
default:
break;
}
...
}
有人能对此有所启示吗?
最佳答案
您可以将代码更改为使用getActionMasked()。
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getActionMasked())
{
//...
case MotionEvent.ACTION_POINTER_UP:
Log.d("Debug", "ACTION_POINTER_UP triggered");
default:
break;
}
//...
}
MotionEven getAction()报告一个由ACTION_whatever和
指针索引向左移动ACTION_POINTER_INDEX_SHIFT(8)位。
返回正在执行的操作的类型。考虑使用getActionMasked()和getActionIndex()来检索单独的掩码操作和指针索引。
退货
该动作,例如ACTION_DOWN或ACTION_POINTER_DOWN与移位的指针索引的组合。
在多点触控情况下,使用getAction()可能会造成混乱。如果您想获得最可能发生的那种操作(ACTION_DOWN,ACTION_POINTER_DOWN等),则可以使用
getActionMasked()
代替getAction()
。getActionMasked()
始终返回ACTION_whatever,而没有指针索引位。getAction()
返回(getActionIndex() << 8 | ACTION_whatever)
。(指针索引非常违反直觉,Android尝试重新使用可用的最低索引,如果直接使用它们会产生奇怪的行为,但这是另一个故事,这里最好使用getActionMasked()而不用担心索引)。仅当指针的index = 0时,它在数值上等于
getActionMasked()
,因此您将看到“随机”行为:当您“自然”完成每个捏时,有时您可能先释放了指针0,然后释放了指针1,
您将获得2个事件,分别由getAction()返回ACTION_POINTER_UP和后跟
1<<8 | ACTION_UP
,并在第一个事件上命中case ACTION_POINTER_UP
标签。另外一次您可能先释放了指针1,然后释放了指针0,
您将获得2个事件,其中getAction()返回
1<<8 | ACTION_POINTER_UP
,后跟ACTION_UP。没有用于这些的标签,所有内容都归于
default
。如果使用getActionMasked(),则在两种情况下,都将获得ACTION_POINTER_UP,后跟ACTION_UP。
关于android - 为什么MotionEvent.ACTION_POINTER_UP记录不一致?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24377969/