2012-08-08 117 views
0

我想在屏幕上有四个不同的区域,并且能够确定是否触摸了每个区域。每个区域都应该有一个相应的布尔值,如果被触摸,则该值为true。当一个区域是真的时,画布的一部分会变成不同的颜色。多点触摸事件

这是非常重要的,每个区域独立工作,所以如果区域1和两个是真实的使用者放开区域1的它会立即变得虚假而不会影响区域2

谢谢!

编辑: 我已经尝试了很多东西,但我刚刚重新开始。这是来自一个具有画布的SurfaceView的类。我无法弄清楚什么去了哪里。

public boolean onTouch(View v, MotionEvent ev) { 
    // TODO Auto-generated method stub 



    switch (ev.getAction()) { 
    case MotionEvent.ACTION_DOWN: 

     x = ev.getX(); 
     y = ev.getY(); 

     if (canvasHeight != 0 && canvasWidth != 0) { 

      if (x < canvasWidth/2 && y < canvasWidth/2){ 
      x1 = x; 
      y1 = y; 

      } 

      if (x < canvasWidth && y > canvasHeight){ 
       x2 = x; 
       y2 = y; 
      } 
     } 

     break; 

    case MotionEvent.ACTION_POINTER_DOWN: 

     break; 

    case MotionEvent.ACTION_UP: 

     break; 
    } 

    return true; 
} 
+2

向我们展示您迄今为止所尝试的内容。 – 2012-08-08 20:07:42

回答

1

这是我怎么想靠近你的问题:

  • 创建一个定义屏幕,可以是 按下四个地区rects。
  • 使用多点触摸,检查坐标是否在任何定义的 矩形中。如果是这种情况,则将屏幕区域 的布尔值设置为true,以便将颜色呈现给该区域。如果 坐标不在矩形中,则将布尔值设置为false。

我希望这能让你开始!

更新:

我建议你开始简单,不要使用多点触控。在您触摸的方法中,您可以获得触摸的值xy。一旦触摸屏幕,你可以调用这样的方法,其中x和y是你的参数,例如。 checkRegion(x,y)

的方法可以返回该地区的一个int(因为在这种情况下,你只能碰一次一个):

public int checkRegion(int x, int y) { 
int clickedRegion; 

// Some code that will return the region number: 1 = top left, 2 = top right, 3 = bottom left, 4 = bottom right 

return clickedRegion; 

} 
+0

这正是我的想法!但问题是要确定哪个方块已被按下,以及如何构建onTouch方法。 – Eric 2012-08-08 20:22:58

0

首先,你需要检查所有四个方面;

switch (ev.getAction()) { 
    case MotionEvent.ACTION_DOWN: 

     x = ev.getX(); 
     y = ev.getY(); 

     if (canvasHeight != 0 && canvasWidth != 0) { 
      //you need four sections, not the two? 
      if (x < canvasWidth/2 && y < canvasWidth/2){ 
      //set your respective canvas color to what you want it for this quadrant 
      } 
      if (x < canvasWidth/2 && y > canvasWidth/2){ 
      //set your respective canvas color to what you want it for this quadrant 
      } 
      if (x < canvasWidth && y > canvasHeight){ 
       //set your respective canvas color to what you want it for this quadrant 
      } 
      if (x < canvasWidth && y < canvasHeight){ 
       //set your respective canvas color to what you want it for this quadrant 
      } 
     } 

     break; 

    case MotionEvent.ACTION_POINTER_DOWN: 

     break; 

    case MotionEvent.ACTION_UP: 

     break; 
    } 

     return true; 
    } 

现在,假设你可以得到的工作,所有你需要做的是在action_pointer_down再次做到这一点,它会作为一个“次要”点击注册。

如果动作是Action_up,只要找出用户在哪里举起手指并做同样的事情。你应该考虑的一个问题是:如果用户点击第1象限,但在象限3中提升它?这是一个稍微复杂的情况,但我认为你现在可以跳过它。

+0

谢谢你的回答! 确定指针所在的象限当然至关重要,但并不困难。现在工作正常。 我真的不明白的是如何注册第二,第三和第四个指针。 我只在ACTION_POINTER_DOWN中这样做,还是必须在ACTION_MOVE中添加一些内容? – Eric 2012-08-09 11:39:50