我对活动有16个图像视图......名为img1-> img16。我想在每个图像视图上都有一个差异图像,这不能硬编码,取决于作为额外传递的数字,例如1,2,3 ......添加到这些视图中的图像必须不同。
我目前有代码可以添加16张图片,但这些图片并不是唯一的......它们是重复的......
int[] imageViews = {
R.id.img1, R.id.img2,
R.id.img3, R.id.img4,
R.id.img5, R.id.img6,
R.id.img7, R.id.img8,
R.id.img9, R.id.img10,
R.id.img11, R.id.img12,
R.id.img13, R.id.img14,
R.id.img15, R.id.img16
};
int[] images = {
R.drawable.img1, R.drawable.img2,
R.drawable.img3, R.drawable.img4,
R.drawable.img5, R.drawable.img6,
R.drawable.img7, R.drawable.img8,
R.drawable.img9, R.drawable.img10,
R.drawable.img11, R.drawable.img12,
R.drawable.img13, R.drawable.img14,
R.drawable.img15, R.drawable.img16
};
Random random = new Random(System.currentTimeMillis());
for(int v : imageViews)
{
ImageView iv = (ImageView)findViewById(v);
iv.setImageResource(images[random.nextInt(images.length - 1)]);
}
而且,如果可能的话,我需要它,以便图像不在图像阵列中进行硬编码,因为它们将根据传递的数量而不同。
所以这些图像是针对数字1的,但如果将数字2传递给活动,则图像会有所不同。
所有细节都保存在本地数据库中,图像都在可绘制文件夹中,并且都将遵循相同的命名样式,例如: img1一路说img100 ....
非常感谢提前。
/ 更新 /
嗨,我已尝试使用以下代码:
Random random = new Random(System.currentTimeMillis());
List<Integer> generated = new ArrayList<Integer>();
for(int v : imageViews)
{
int next = random.nextInt(15) + 1;
if (!generated.contains(next))
{
generated.add(next);
ImageView iv = (ImageView)findViewById(v);
iv.setImageResource(images[next]);
}
}
我猜这可能完全错了......但是到目前为止我还没有找到重复,但是没有帮助的差距,它好像它可能生成16个随机的int但只添加那些如果你理解的话,它们是独一无二的,而不是产生直到16个独特的图像?
有关这方面的任何想法吗?
答案 0 :(得分:1)
每当你获得下一个随机int时,将该值保存在数组中。然后在下次获得随机int时,检查是否已经选择了该数字。如果有,则重复该过程,直到选择了未选择的int。
修改:试用此代码:
Random random = new Random( System.currentTimeMillis() );
List<Integer> generated = new ArrayList<Integer>();
for (int i = 0; i < imageViews.length; i++) {
int v = imageViews[i];
int next = random.nextInt( 15 ) + 1;
if ( !generated.contains( next ) ) {
generated.add( next );
ImageView iv = (ImageView) findViewById( v );
iv.setImageResource( images[next] );
}
else {
i--;
}
}