使用getPointerCount()正确计数指针

时间:2015-04-17 00:56:57

标签: android motionevent

我正在为学校项目编写Android应用程序,该应用程序根据用户点击屏幕的手指数执行不同的操作。

现在,此操作仅用于显示检测为吐司的指针数。

我使用getPointerCount()方法,但出于某种原因,我得到了多个祝酒词。例如,一个三指水龙头给我两个和三个手指点击的敬酒,一个四指点击将给我两个,三个和四个手指点击的祝酒,依此类推。

我不能为我的生活找出原因。一个四指点击应显示一个吐司说" 4",不循环通过2,3和4!任何帮助将不胜感激。

public boolean onTouchEvent(MotionEvent event)
{
    int action = event.getAction();

    switch(action & MotionEvent.ACTION_MASK)
    {
        case MotionEvent.ACTION_POINTER_DOWN:

            int count = event.getPointerCount();

            if (count == 2) {
                finish();
            }

            else if (count == 4) {
                Toast.makeText(this, String.valueOf(count), Toast.LENGTH_SHORT).show();
            }

            else if (count == 3) {
                Toast.makeText(this, String.valueOf(count), Toast.LENGTH_SHORT).show();
            }
            break;
    }
    return true;
}

P.S,我已经尝试将代码移到switch语句之外,奇怪的是,这会导致toasts向上和向下计数!

1 个答案:

答案 0 :(得分:0)

您将点击视为离散事件,但Android MotionEvents是作为流传递的。为了获得带有三根手指的ACTION_POINTER_DOWN,需要先用两根手指向下移动一个动作指针。 (如果你考虑一下,所有三个手指都不会在同一时间下降,即使这可能你不会那样接收它们。)

如果您使用

记录每个动作事件
Log.i("test", event.toString());

您应该能够看到正在接收的事件序列,并更好地了解如何处理它们。