我想在活动中手势。为此,我已覆盖Activity上的公共布尔onTouchEvent(MotionEvent MEvent)方法。内容如下所示:

motionaction = MEvent.getAction();

if(motionaction == MotionEvent.ACTION_DOWN)
{
    ...
    return true;
}

if(motionaction == MotionEvent.ACTION_UP)
{
    ...
    return true;
}

if(motionaction == MotionEvent.ACTION_MOVE)
{
    ...
    return true;
}

motionaction = MEvent.getActionMasked();

if(motionaction == MotionEvent.ACTION_POINTER_DOWN)
{
    ...
    return true;
}

if(motionaction == MotionEvent.ACTION_POINTER_UP)
{
    ...
    return true;
}

return true;


手势如下:

-finger1在屏幕上保持其位置(实际上是因为总是有一点移动)

-finger2在屏幕上移动。这是我要抓住的运动。

我可以抓住5个动作,但是问题是当两个手指在屏幕上时,ACTION_MOVE抓住了第一根和第二根手指的运动。 MEvent.getActionIndex()方法不适用于始终返回0的ACTION_MOVE;我唯一能做的就是保存finger1的位置,并放弃该点附近的运动。结果,有时手指2的移动确实并不完美,但由于手指1的微小移动而受到“污染”,这是因为尽管手指在屏幕上保持其位置,听众仍会感觉到每个最小的移动。

我该如何改善呢?

最佳答案

关于昆汀·巴尔斯顿的答案:

我的代码中有类似的内容。我在ACTION_DOWN情况下保存了finger1的位置,然后当finger2移动时,我查看移动的Y坐标是否在已保存的finger1 Y坐标之上。如果是这样的话,它的运动指的是finger2,否则指的是finger1,我在两指模式下将其丢弃。

如果我尝试以单指模式在视图上画一个圆,我会得到以下信息:
http://img208.imageshack.us/img208/8113/onefingercircle.jpg

如果我尝试以两指模式在视图上画一个圆,我会得到以下信息:
http://img256.imageshack.us/img256/6778/twofingercircle.jpg

因此,在一个手指模式下,它可以完美工作,但在两个手指模式下却不能。
我不知道它是否与电话多点触控程序或触摸屏有关。也可能只是与硬件相关,或者是我对API的误解。

关于java - Android-如何区分onTouchEvent中的第一指针和第二指针移动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11611961/

10-12 00:23
查看更多