Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 视图。包含(x,y)不';对于3x3网格,无法正常工作_Java_Android_Mobile - Fatal编程技术网

Java 视图。包含(x,y)不';对于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

我正在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");
    } 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是错误的方法?正确的方法是什么?我打印出了变量,看起来它们都有相同的坐标-我如何解决这个问题?