了解Android上的多点触控?

时间:2012-10-16 16:15:46

标签: java android

我发现这篇文章:http://android-developers.blogspot.ca/2010/06/making-sense-of-multitouch.html这有助于我理解,但我仍然不确定如何做我想做的事。

在我的游戏中,我有一个虚拟模拟棒和一些按钮。一次只能注册2个手指。这就是我要的。一个用于模拟棒,一个用于按钮。

我不确定的主要是,我把手指放在模拟摇杆上并移动它,然后用手指按下按钮,然后释放按钮,模拟摇杆应该继续移动到我的第一个手指。

反之亦然,如果按钮首先接触然后接触模拟摇杆,如果我放开模拟摇杆,按钮仍应按下。

触控指针在Android上以这种方式工作,就像在我用手指向下,无论我上下放置任何其他手指,它都会按顺序记住我的第一根手指然后向下移动,移动移动提升事件?

由于

理想情况下,我希望我有这样的功能:

void onTouch(int fingerID, int action, int x, int y)
{

}

当手指向上移动时,放下的每个手指都会向下,向上和向上移动。

游戏是一款赛车游戏,所以他们需要能够在同一时间引导和推动汽油。

我的问题与此类似 identified multi touch pointer in action_move

编辑:

我有这段代码:

private void onTouch(int finger, int action, float x, float y)
    {
        if(action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN)
        {
            createInput(finger, x, y);
        }
        else if(action == MotionEvent.ACTION_MOVE)
        {
            inputMove(finger, x, y);
        }
        else if(action == MotionEvent.ACTION_UP  || action == MotionEvent.ACTION_POINTER_UP)
        {
            destroyInput(finger, x, y);
        }
    }

    public void onTouch(MotionEvent ev)
     {
         final int pointerCount = ev.getPointerCount();
         for (int p = 0; p < pointerCount; p++) {
             onTouch(ev.getPointerId(p), ev.getAction(), ev.getX(p), ev.getY(p));
         }
     }

但它只适用于第一个。

2 个答案:

答案 0 :(得分:1)

因此,从MotionEvent类中给出的示例:

 public boolean onTouch(MotionEvent ev) {
     final int pointerCount = ev.getPointerCount();
     for (int p = 0; p < pointerCount; p++) {
         onTouch(ev.getPointerId(p), ev.getAction(), ev.getX(p), ev.getY(p));
     }
     return true;
 }

答案 1 :(得分:0)

您可以查看AChartEngine中用于缩放的夹点处理方式。请参阅this代码,从第80行开始。它在开头可能看起来很复杂,但它可以帮助您处理更多用例。