8

文档对此进行了说明:

手势以带有 ACTION_DOWN 的运动事件开始,该事件提供第一个向下指针的位置。随着每个向下或向上的附加指针,框架将相应地生成带有 ACTION_POINTER_DOWN 或 ACTION_POINTER_UP 的运动事件。

所以我在我的活动中完成了 onTouchEvent 函数的覆盖:

@Override
public boolean onTouchEvent(MotionEvent MEvent) 
{

    motionaction = MEvent.getAction();

    if(motionaction == MotionEvent.ACTION_DOWN)
    {
        System.out.println("DEBUG MESSAGE POINTER1 " + MEvent.getActionIndex() );
    }

    if(motionaction == MotionEvent.ACTION_POINTER_DOWN)
    {
        System.out.println("DEBUG MESSAGE POINTER2 "  + MEvent.getActionIndex() );
    }

}

不幸的是,第二个 if 从未输入。该活动包含 2 个视图和 2 个OnTouchListener,我知道仅当活动的视图不消耗事件时才会调用 onTouchEvent ,因此我尝试在侦听器中返回 false ,这样我只能识别第一根手指触摸但是这避免了侦听器接收 ACTION_UP 事件并且不允许我识别第二个手指触摸。我也尝试在侦听器中返回 true,但是在手动调用 onTouchEvent 函数之后,但这也让我也只能识别第一个手指触摸。

我的代码有什么问题?

4

1 回答 1

19

我相信您的代码缺少屏蔽操作,例如:

switch (motionaction & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_POINTER_DOWN:
}

此代码应该能够检查 ACTION_POINTER_DOWN。

祝你好运并告诉我们会发生什么。

汤米奎

于 2012-07-06T06:39:38.477 回答