我正在尝试在布局上生成随机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。
答案 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);