我认为pinch总会触发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;
}
...
}
有人可以对此有所了解吗?
答案 0 :(得分:3)
您可以将代码更改为使用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_ 和 指针索引由ACTION_POINTER_INDEX_SHIFT(8)位左移。
返回正在执行的操作类型。考虑使用getActionMasked()和getActionIndex()来检索单独的掩码操作和指针索引。
返回 操作,例如ACTION_DOWN或ACTION_POINTER_DOWN与移位指针索引的组合。
getAction()在多点触控情况下使用起来非常困惑。如果您想要获得您最有可能采取的行动(ACTION_DOWN,ACTION_POINTER_DOWN等),则可以使用getActionMasked()
代替getAction()
。
getActionMasked()
总是返回ACTION_ 无论,没有指针索引位。
getAction()
返回(getActionIndex() << 8 | ACTION_whatever)
。
(指针索引非常违反直觉,Android试图重新使用可用的最低索引,如果直接使用它们会产生奇怪的行为,但这是另一个故事,这里更好地使用getActionMasked()而不用担心关于指数)。仅当指针具有index = 0时,这在数值上等于getActionMasked()
,因此您将看到&#34; random&#34;行为:当你完成每一次捏合时,#34;,
1<<8 | ACTION_UP
,并点击第一个事件的case ACTION_POINTER_UP
标签。1<<8 | ACTION_POINTER_UP
后跟ACTION_UP的事件。
这些都没有案例标签,所有案例都归结为default
。如果使用getActionMasked(),则在两种情况下都会获得ACTION_POINTER_UP,后跟ACTION_UP。