将随机和独特的图像添加到imageviews android

时间:2012-06-04 17:28:28

标签: android image random imageview

我对活动有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个独特的图像?

有关这方面的任何想法吗?

1 个答案:

答案 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--;
    }
}