我有一个ImageViewArray
并且我正在随机化他们的位置,我想检查当前位置是否已包含ImageView
,而不是为x,y
保留大量值ImageView
ImageView[] imageViewArray = new ImageView[40];
for (int i = 0; i < 40; i++) {
imageViewArray[i] = new ImageView(this);
imageViewArray[i].setTag(i);
imageViewArray[i].setImageResource(R.mipmap.enemy);
rlt.addView(imageViewArray[i]);
imageViewArray[i].setX(rand.nextInt(rlt.getWidth()));
imageViewArray[i].setY(rand.nextInt(rlt.getHeight()));
if(imageViewArray[i].getX()=) // here I want to check if it already contains an ImageView.
}
1}}在数组中。
这是我的代码:
ImageView[] imageViewArray = new ImageView[20];
ArrayList<Float> xarray = new ArrayList<>();
ArrayList<Float> yarray = new ArrayList<>();
for (int i = 0; i < 20; i++) {
imageViewArray[i] = new ImageView(this);
imageViewArray[i].setTag(i);
imageViewArray[i].setImageResource(R.mipmap.enemy);
imageViewArray[i].setX((float)rand.nextInt(1 + layoutwidth));
imageViewArray[i].setY((float)rand.nextInt(1 + layoutheight));
xarray.add(imageViewArray[i].getX());
yarray.add(imageViewArray[i].getY());
rlt.addView(imageViewArray[i]);
Toast.makeText(MainActivity.this,imageViewArray[i].getX() +"blabla",Toast.LENGTH_LONG);
}
可能的解决方案
创建IntArray并为其添加X值以及它的每个Y值,然后在它们之间进行比较,它是最佳解决方案吗?
解决方案的问题 - 没有任何反应,imageview不会改变位置,并且Toast不会被执行。
代码:
private int layoutwidth, layoutheight, randx, randy;
private RelativeLayout rlt;
....
rlt = (RelativeLayout) findViewById(R.id.layout);
rlt.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
rlt.getViewTreeObserver().removeOnGlobalLayoutListener(this);
layoutwidth = rlt.getWidth();
layoutheight = rlt.getHeight();
}
});
修改
layoutwidth为零:
foo -o /dev/stdout
答案 0 :(得分:1)
是的,这是最好的解决方案。你需要从某个地方加载矩形。你可以合并矩形,如果一个包含另一个矩形,但是你会使你的任务过于复杂,并且在你编写更高性能和更清晰的代码的过程中,你最终会得到一个缓慢而复杂的代码。编写代码时,存储X,Y点对,其中X是顶角位置,Y是右下角位置。
请注意,我假设图片没有旋转。如果图像可能会旋转,那么您需要一个更通用的解决方案,使用定义矩形的不等式来查看矩形的点集与另一个矩形的点集相交的位置。如果交集为空,则“空间不用完”。