0

我有 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 个随机整数,但只会添加唯一的整数,如果你明白的话,而不是生成直到达到 16 个独特的图像?

在这方面有什么想法吗?

4

1 回答 1

1

每当您获得下一个随机整数时,将该值保存在数组中。然后下次你得到一个随机整数时,检查这个数字是否已经被选中。如果有,请重复该过程,直到选择了未选择的 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--;
    }
}
于 2012-06-04T17:39:42.877 回答