碰撞ImageViews无法正常工作

时间:2013-10-25 09:45:17

标签: android recursion imageview collision

我正在尝试在布局上生成随机ImageView,而不会使ImageView相互交叉。我在屏幕尺寸中生成一个随机点,如下所示:

private Point generateRandomLocation(Point dimensions) {
    Random random = new Random();

    // generate random x
    int x = random.nextInt((dimensions.x - 0) + 1);

    // generate random y
    int y = random.nextInt((dimensions.y - 0) + 1);

    Point location = new Point(x, y);

    if(!collision(location)) {
        return new Point(x, y);
    } else {
        return generateRandomLocation(dimensions);
    }

}

碰撞方法包含以下方法来确定ImageViews是否发生碰撞。 BubbleImage是ImageView的简单扩展。

private boolean collision(Point location) {
    // takes 100 as inital width & height
    int x_1 = location.x;
    int y_1 = location.y;

    int x_2;
    int y_2;

    boolean collided = false;

    // get all bubbleimages
    for (int i = 0; i < mainLayout.getChildCount(); i++) {
        View childView = mainLayout.getChildAt(i);
        if (childView instanceof BubbleImage) {
            x_2 = (int) childView.getX();
            y_2 = (int) childView.getY();

            // create rectangles
            Rect rect1 = new Rect(x_1, y_1, x_1 + 100, y_1 - 100);
            Rect rect2 = new Rect(x_2, y_2, x_2 + 100, y_2 - 100);
            collided = Rect.intersects(rect1, rect2);

        }
    }

    return collided;

}

有人在这里发现了错误的逻辑吗?

编辑:即使图像视图相交,Rect.intersects()似乎也返回false。

1 个答案:

答案 0 :(得分:2)

创建新的Rects rect1&amp; rect2,构造函数是Rect(左,上,右,下)。例如。 Rect(10,10,20,20),因为android屏幕原点位于左上角。 你以错误的方式创建了Rects(左,底部,右边,顶部)。尝试在构造函数调用中切换第2和第4个参数,或者将第4个参数增加到大于第2个参数。 像这样: Rect rect1 = new Rect(x_1,y_1,x_1 + 100,y_1 + 100);