用于Android开发的多个手指输入

时间:2011-04-13 00:30:05

标签: android input touch

让计算器应用程序工作后我决定尝试创建pong。中间有一个盒子,两端有两个拨片。手机是水平的。我把盒子从墙上弹开,桨叶随着我的手指向下移动。我的问题是我想让它成为两个玩家,我希望有多个手指输入游戏。我想要一个手指移动桨1,另一个手指移动桨2.到目前为止,这是我的输入代码

@Override
 public boolean onTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        switch (action) {

        case MotionEvent.ACTION_MOVE: {
            // Find the index of the active pointer and fetch its position



           float p1y = ev.getY();

            if(ev.getX()<300)
            {
              player1y = p1y;
            }
            if(ev.getX()>300)
            {
              player2y = p1y;
            }

           //player1y = p1y;

            invalidate();
            break;
        }

        }
        return true;


    }

它位于我的surfaceview类中。如何修改输入法或完全摆脱它并更改它以实现我的目标?对我的变量也很抱歉。 Eclipse在我身上崩溃很多,而我的笔记本电脑触摸面板往往会移动我的光标,因此较短的变量似乎可行。 p1y是触摸的y。而player1y和player2y是player1和player2球拍的y位置。

1 个答案:

答案 0 :(得分:2)

MotionEvent可以包含多个指针。使用getPointerCount()查看当前事件中有多少指针正在触摸屏幕。 getXgetY的备用版本采用0 - getPointerCount() - 1的索引。

在一个更复杂的应用程序中,您可能希望通过指针ID跟踪手指,但是对于您在屏幕上使用截止点这么简单的事情,您可以在ACTION_MOVE情况下执行以下操作:

int pointerCount = ev.getPointerCount();
for (int i = 0; i < pointerCount; i++) {
    float x = ev.getX(i);
    float y = ev.getY(i);

    if (x < 300) {
        player1y = y;
    } else if (x > 300) {
        player2y = y;
    }
}

如果您想了解更多信息,Android开发者博客中的这篇文章可能有所帮助:http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html