Java 视图。包含(x,y)不';对于3x3网格,无法正常工作
我正在3x3网格上构建一个游戏,当用户将鼠标悬停在按钮上时,它必须将其所在的块记录到控制台上,但它的方式只是由于Java 视图。包含(x,y)不';对于3x3网格,无法正常工作,java,android,mobile,Java,Android,Mobile,我正在3x3网格上构建一个游戏,当用户将鼠标悬停在按钮上时,它必须将其所在的块记录到控制台上,但它的方式只是由于y值相同而注册顶部块 代码如下: if(b1R.contains(x, y)){ // arr.add("1"); Log.d("block", "1"); } else if(b4R.contains(x,y)){ // arr.add("4"); Log.d("block", "4"); } els
y
值相同而注册顶部块
代码如下:
if(b1R.contains(x, y)){
// arr.add("1");
Log.d("block", "1");
} else if(b4R.contains(x,y)){
// arr.add("4");
Log.d("block", "4");
} else if(b7R.contains(x,y)){
// arr.add("7");
Log.d("block", "7");
}
if(b2R.contains(x,y)){
// arr.add("2");
Log.d("block", "2");
} else if(b8R.contains(x,y)){
// arr.add("8");
Log.d("block", "8");
} else if(b5R.contains(x,y)){
// arr.add("5");
Log.d("block", "5");
}
if(b3R.contains(x,y)){
// arr.add("3");
Log.d("block", "3");
} else if(b6R.contains(x,y)){
// arr.add("6");
Log.d("block", "6");
} else if(b9R.contains(x,y)){
// arr.add("9");
Log.d("block", "9");
}
@Override
public void onWindowFocusChanged (boolean hasFocus){
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
Log.d("b1 left", ""+b1.getLeft());
Log.d("b1 top", ""+b1.getTop());
Log.d("b1 right", ""+b1.getRight());
Log.d("b1 bottom", ""+b1.getBottom());
Log.d("b2 left", ""+b2.getLeft());
Log.d("b2 top", ""+b2.getTop());
Log.d("b2 right", ""+b2.getRight());
Log.d("b2 bottom", ""+b2.getBottom());
Log.d("b3 left", ""+b3.getLeft());
Log.d("b3 top", ""+b3.getTop());
Log.d("b3 right", ""+b3.getRight());
Log.d("b3 bottom", ""+b3.getBottom());
Log.d("b4 left", ""+b4.getLeft());
Log.d("b4 top", ""+b4.getTop());
Log.d("b4 right", ""+b4.getRight());
Log.d("b4 bottom", ""+b4.getBottom());
Log.d("b5 left", ""+b5.getLeft());
Log.d("b5 top", ""+b5.getTop());
Log.d("b5 right", ""+b5.getRight());
Log.d("b5 bottom", ""+b5.getBottom());
Log.d("b6 left", ""+b6.getLeft());
Log.d("b6 top", ""+b6.getTop());
Log.d("b6 right", ""+b6.getRight());
Log.d("b6 bottom", ""+b6.getBottom());
Log.d("b7 left", ""+b7.getLeft());
Log.d("b7 top", ""+b7.getTop());
Log.d("b7 right", ""+b7.getRight());
Log.d("b7 bottom", ""+b7.getBottom());
Log.d("b8 left", ""+b8.getLeft());
Log.d("b8 top", ""+b8.getTop());
Log.d("b8 right", ""+b8.getRight());
Log.d("b8 bottom", ""+b8.getBottom());
Log.d("b9 left", ""+b9.getLeft());
Log.d("b9 top", ""+b9.getTop());
Log.d("b9 right", ""+b9.getRight());
Log.d("b9 bottom", ""+b9.getBottom());
b1R = new Rect(b1.getLeft(), b1.getTop(), b1.getRight(), b1.getBottom());
b2R = new Rect(b2.getLeft(), b2.getTop(), b2.getRight(), b2.getBottom());
b3R = new Rect(b3.getLeft(), b3.getTop(), b3.getRight(), b3.getBottom());
b4R = new Rect(b4.getLeft(), b4.getTop(), b4.getRight(), b4.getBottom());
b5R = new Rect(b5.getLeft(), b5.getTop(), b5.getRight(), b5.getBottom());
b6R = new Rect(b6.getLeft(), b6.getTop(), b6.getRight(), b6.getBottom());
b7R = new Rect(b7.getLeft(), b7.getTop(), b7.getRight(), b7.getBottom());
b8R = new Rect(b8.getLeft(), b8.getTop(), b8.getRight(), b8.getBottom());
b9R = new Rect(b9.getLeft(), b9.getTop(), b9.getRight(), b9.getBottom());
}
}
我在if else if
语句中使用它的原因是,当我将鼠标悬停在1按钮上时,它会同时将所有3个块记录在同一列中(1,4,7或2,5,8或3,6,9)
b1R代表按钮1矩形,设置如下(b1是33格上的图像按钮1):
目前,当我将鼠标悬停在左列(左列中的任何块)上时,它只返回1,对于任何列都是一样的。我如何才能通过此错误/问题
更新
我得出的结论是所有的块都有相同的坐标,我不明白为什么
代码如下:
if(b1R.contains(x, y)){
// arr.add("1");
Log.d("block", "1");
} else if(b4R.contains(x,y)){
// arr.add("4");
Log.d("block", "4");
} else if(b7R.contains(x,y)){
// arr.add("7");
Log.d("block", "7");
}
if(b2R.contains(x,y)){
// arr.add("2");
Log.d("block", "2");
} else if(b8R.contains(x,y)){
// arr.add("8");
Log.d("block", "8");
} else if(b5R.contains(x,y)){
// arr.add("5");
Log.d("block", "5");
}
if(b3R.contains(x,y)){
// arr.add("3");
Log.d("block", "3");
} else if(b6R.contains(x,y)){
// arr.add("6");
Log.d("block", "6");
} else if(b9R.contains(x,y)){
// arr.add("9");
Log.d("block", "9");
}
@Override
public void onWindowFocusChanged (boolean hasFocus){
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
Log.d("b1 left", ""+b1.getLeft());
Log.d("b1 top", ""+b1.getTop());
Log.d("b1 right", ""+b1.getRight());
Log.d("b1 bottom", ""+b1.getBottom());
Log.d("b2 left", ""+b2.getLeft());
Log.d("b2 top", ""+b2.getTop());
Log.d("b2 right", ""+b2.getRight());
Log.d("b2 bottom", ""+b2.getBottom());
Log.d("b3 left", ""+b3.getLeft());
Log.d("b3 top", ""+b3.getTop());
Log.d("b3 right", ""+b3.getRight());
Log.d("b3 bottom", ""+b3.getBottom());
Log.d("b4 left", ""+b4.getLeft());
Log.d("b4 top", ""+b4.getTop());
Log.d("b4 right", ""+b4.getRight());
Log.d("b4 bottom", ""+b4.getBottom());
Log.d("b5 left", ""+b5.getLeft());
Log.d("b5 top", ""+b5.getTop());
Log.d("b5 right", ""+b5.getRight());
Log.d("b5 bottom", ""+b5.getBottom());
Log.d("b6 left", ""+b6.getLeft());
Log.d("b6 top", ""+b6.getTop());
Log.d("b6 right", ""+b6.getRight());
Log.d("b6 bottom", ""+b6.getBottom());
Log.d("b7 left", ""+b7.getLeft());
Log.d("b7 top", ""+b7.getTop());
Log.d("b7 right", ""+b7.getRight());
Log.d("b7 bottom", ""+b7.getBottom());
Log.d("b8 left", ""+b8.getLeft());
Log.d("b8 top", ""+b8.getTop());
Log.d("b8 right", ""+b8.getRight());
Log.d("b8 bottom", ""+b8.getBottom());
Log.d("b9 left", ""+b9.getLeft());
Log.d("b9 top", ""+b9.getTop());
Log.d("b9 right", ""+b9.getRight());
Log.d("b9 bottom", ""+b9.getBottom());
b1R = new Rect(b1.getLeft(), b1.getTop(), b1.getRight(), b1.getBottom());
b2R = new Rect(b2.getLeft(), b2.getTop(), b2.getRight(), b2.getBottom());
b3R = new Rect(b3.getLeft(), b3.getTop(), b3.getRight(), b3.getBottom());
b4R = new Rect(b4.getLeft(), b4.getTop(), b4.getRight(), b4.getBottom());
b5R = new Rect(b5.getLeft(), b5.getTop(), b5.getRight(), b5.getBottom());
b6R = new Rect(b6.getLeft(), b6.getTop(), b6.getRight(), b6.getBottom());
b7R = new Rect(b7.getLeft(), b7.getTop(), b7.getRight(), b7.getBottom());
b8R = new Rect(b8.getLeft(), b8.getTop(), b8.getRight(), b8.getBottom());
b9R = new Rect(b9.getLeft(), b9.getTop(), b9.getRight(), b9.getBottom());
}
}
“我在if-else-if语句中使用它的原因是,当我将鼠标悬停在1个按钮上时,它会同时将所有3个块记录在同一列中(1,4,7或2,5,8或3,6,9)。”>这表明在如何设置矩形或如何计算坐标是否在其中存在错误。这不应该发生;没有一个点可以在所有三个矩形区域中,除非它们重叠,而它们不应该重叠,对吗?你确定一切都在同一个坐标系下工作吗?你确定没有矩形重叠吗?是的,它在表格布局中。什么?作为测试,打印出每个矩形的顶部、底部、左侧和右侧,并确保没有重叠。同时打印出正在测试的x和y鼠标值。它不应该落在多个矩形中。你的if/else是错误的方法。好的,我会这么做。为什么if-else是错误的方法?正确的方法是什么?我打印出了变量,看起来它们都有相同的坐标-我如何解决这个问题?