简单的Android多点触控编程

时间:2011-04-07 17:05:33

标签: android multi-touch

我已经搜索了试图为此找到答案的互联网,但我读过的所有教程似乎都显着地使我的小问题复杂化了。基本上,如果您在屏幕左侧上下拖动手指,我会在屏幕左侧有一个上下移动的船,如果您触摸屏幕右侧的任何位置,则会发射导弹。

public boolean onTouchEvent(MotionEvent event)
{
    if (event.getX() < getWidth()/2)
    {   
        if (shipY < event.getY())
            shipY = shipY + 10;
        if(shipY > event.getY())
            shipY = shipY - 10;
    }

    if (event.getX() >= getWidth()/2)
    {
        if(!missile)
        {
            missile = true;
            missileY = shipY;
            missileX = shipX;
        }
    }
    return true;
}

现在,如果我停止移动船只,我只能发射导弹。非常感谢!

2 个答案:

答案 0 :(得分:0)

昨天我对这个问题做出了解释:Touch more one button at once

TL; DR - 您无法同时触摸两个视图。如果要在多个View对象上完成并发触摸,则需要将它们组合到自定义ViewGroup中并自行调度触摸事件。

答案 1 :(得分:0)

如果您的船只和导弹碰巧在同一个视图中,那么您可以将onTouchListener添加到该视图中,该视图将处理多次触摸。 (它将是您自己的类,它实现了View.onTouchListener)

这是你需要在onTouchListener中覆盖的方法的骨架:

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction() & MotionEvent.ACTION_MASK) {

        case MotionEvent.ACTION_DOWN:
            //first finger went down
            break;

        case MotionEvent.ACTION_MOVE:
            //a touch placement has changed
            break;

        case MotionEvent.ACTION_UP:
            //first finger went up
            break;

        case MotionEvent.ACTION_CANCEL:
            //gesture aborted (I think this means the finger was dragged outside of the touchscreen)
            break;

        case MotionEvent.ACTION_POINTER_DOWN:
            //second finger (or third, or more) went down.
            break;

        case MotionEvent.ACTION_POINTER_UP:
            //second finger (or more) went up.
            break;

            default: break;
        }
        return true;
    }

您可以在http://developer.android.com/reference/android/view/MotionEvent.html获取有关这些案例(以及您可能想要使用的其他案例)的更多详细信息。

关于你如何处理你的逻辑 - 在理智的情况下,你的ACTION_DOWN或“第一根手指”可能对应于接触船只的玩家,以及他们想要射击导弹的ACTION_POINTER_DOWN。但请记住处理玩家可能首先触摸屏幕的“导弹侧”,然后触摸船只然后移动它的情况。