Android 多点触控事件

Android 多点触控事件,android,multi-touch,Android,Multi Touch,我想在屏幕上有四个不同的区域,并且能够确定是否每个区域都被触摸。每个区域都应该有一个对应的布尔值,如果触摸该值,则该值为真。当一个区域为真时,画布的一部分将变成不同的颜色 每个区域独立工作是非常重要的,因此如果区域1和2为真,并且用户放弃区域1,它将立即变为假,而不会影响区域2 谢谢 编辑: 我尝试了很多事情,但我刚刚重新开始。这来自一个具有带画布的SurfaceView的类。我想不出什么会去哪里 public boolean onTouch(View v, MotionEvent ev) {

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

每个区域独立工作是非常重要的,因此如果区域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;
}
public boolean onTouch(视图v、运动事件ev){
//TODO自动生成的方法存根
开关(ev.getAction()){
case MotionEvent.ACTION\u DOWN:
x=ev.getX();
y=ev.getY();
如果(画布高度!=0&&canvasWidth!=0){
如果(xcanvasHeight){
x2=x;
y2=y;
}
}
打破
case MotionEvent.ACTION\u指针\u向下:
打破
case MotionEvent.ACTION\u UP:
打破
}
返回true;
}

以下是我如何解决您的问题:

  • 创建矩形,用于定义屏幕上可以显示的四个区域 按
  • 使用multi-touch(多点触控)检查坐标是否处于任何定义的位置 矩形。如果是这种情况,则设置该区域的布尔值 将屏幕的颜色设置为true,以便将颜色渲染到该区域。如果 坐标不在矩形中,然后将布尔值设置为false
我希望这能让你开始

更新:

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

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


首先,你需要检查所有四个区域

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;
    }
开关(ev.getAction()){
case MotionEvent.ACTION\u DOWN:
x=ev.getX();
y=ev.getY();
如果(画布高度!=0&&canvasWidth!=0){
//你需要四个部分,不是两个?
如果(xcanvasWidth/2){
//将各自的画布颜色设置为此象限所需的颜色
}
如果(xcanvasHeight){
//将各自的画布颜色设置为此象限所需的颜色
}
if(x<画布宽度&y<画布高度){
//将各自的画布颜色设置为此象限所需的颜色
}
}
打破
case MotionEvent.ACTION\u指针\u向下:
打破
case MotionEvent.ACTION\u UP:
打破
}
返回true;
}
现在,假设你能让它工作,你所需要做的就是在动作指针下再做一次,它将注册为“第二次”点击


如果动作是action\u up,只需找出用户抬起手指的位置,然后做同样的事情。你应该考虑的一个问题是:;如果用户在象限1中单击,但在象限3中将其抬起,该怎么办?这是一个稍微复杂一点的情况,但我想你现在可以跳过它。

向我们展示你迄今为止的尝试。这正是我的想法!但问题是要确定哪个方块被按下,以及如何建立onTouch方法。谢谢你的回答!确定指针位于哪个象限当然很重要,但也不是那么困难。现在效果很好。我真正不懂的是如何注册第二个、第三个和第四个指针。我是在行动中做这件事,还是在行动中添加一些东西?
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;
    }