0

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

每个区域独立工作是非常重要的,所以如果区域 1 和区域 2 为真,并且用户放开区域 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;
}
4

2 回答 2

1

以下是我处理您的问题的方法:

  • 创建定义屏幕的四个可按下区域的矩形。
  • 使用多点触控,检查坐标是否在任何定义的矩形中。如果是这种情况,则将屏幕该区域的布尔值设置为 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;

}
于 2012-08-08T20:16:56.147 回答
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 中将其抬起会怎样?这是一个稍微复杂一点的情况,但我认为你现在可以跳过它。

于 2012-08-08T21:02:16.613 回答