我有几个图像视图和几个图像要添加到布局,我随机添加它们,我需要确保两个图像视图不包含相同的图像...这是我的for循环动态添加图像到图像视图。
Random random = new Random(System.currentTimeMillis());
for(int v : imageViews) {
ImageView iv = (ImageView)findViewById(v);
iv.setImageResource(images[random.nextInt(images.length-1)]);
}
我找到了一种方法,我将添加编辑代码:
LinearLayout linearLayout1 = (LinearLayout) findViewById(R.id.bottomView);
for(int x=0;x<images.length;x++) {
Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),images[x]);
int width = bitmapOrg.getWidth();
int height = bitmapOrg.getHeight();
int newWidth = 200;
int newHeight = 200;
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
matrix.postRotate(0);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0,
width, height, matrix, true);
BitmapDrawable bmd = new BitmapDrawable(getResources(),resizedBitmap);
ImageView imageView = new ImageView(this);
imageView.setPadding(2, 0, 9, 5);
imageView.setImageDrawable(bmd);
imageView.setTag(x);
imageView.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
}
});
linearLayout1.addView(imageView);
}
答案 0 :(得分:3)
最简单的方法是将图像作为List&lt;&gt;而不是数组,并在循环开始之前调用Collections.shuffle(images, random)。这样,只要顺序选择图像,就可以保证不会重复。
这将是一个非常好的解决方案,特别是如果图像集合不是非常大(否则你可能会拖拽一个非常大的列表来选择它的一小部分)。
如果集合 大,那么您可以保留一个已经选择的位置的HashSet,并确保每次都选择一个新图像。