Android:生成不重复的随机图像

时间:2011-04-01 09:50:43

标签: android

我在Android应用程序上制作不重复的随机图像时遇到了麻烦。

让我们在我的应用程序上说我有这三个部分,我有13张照片。我需要一种方法从我在@drawable上的13张照片中生成3张随机图像,但这3幅图片应该彼此不同。

例如:它不能是TOP 3部分的img1,img1,img2或img1,img1,img1,但它应该是img1,img2,img3。

到目前为止,我手头有这个方法:

final Button imgView = (Button)findViewById(R.id.top1);
        Random rand = new Random();            
        int rndInt = rand.nextInt(13) + 1; 
        String imgName = "img" + rndInt;
        int id = getResources().getIdentifier(imgName, "drawable", getPackageName());  
        imgView.setBackgroundResource(id);

在我的布局上,我将TOP 3部分中的一个图像ID指定为top1。我还有顶部3的id top2和top3。上面的代码将查看我的可绘制图像,其名称为“img1.jpg”,“img2.jpg”,“img3.jpg”,“img4.jpg”等。

我愿意接受任何解决方案。如果有人可以即兴创作我的代码,那么3张图片就不会完美相同。但是如果你们中的任何一个人能够用一种新的方法提供更好的解决方案,那我就是开放的。

谢谢。

3 个答案:

答案 0 :(得分:2)

我建议您将图片ID存储在List中,然后使用shuffle 并通过删除来检索第一个元素。

//the initial list of images
final List<String> images = new ArrayList<String>();
for (int i=1; i<=13; i++){
images.add("img"+i);
}
//the method that retrieves random value
Collections.shuffle(images, new Random());
String randomImage = images.remove(0);

修改

//this code should be inoked on every image add
final Button imgView = (Button)findViewById(R.id.top1);
Collections.shuffle(images, new Random());
String imgName = images.remove(0);
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());  
imgView.setBackgroundResource(id);

列表的初始化应该在图像添加方法之外执行一次(可能在onCreate的某处。

答案 1 :(得分:0)

只是一个想法:

您可以将rndInt存储在地图中并检查if map.containsKey(rndInt),否则另取一个随机ID(并再次检查新ID是否在地图中),else继续正常流程

答案 2 :(得分:0)

你可以尝试这个来获取随机图像...这对我有用.....`final int [] imageViews = {             R.id.imageView2,R.id.imageView10,R.id.imageView3,             R.id.imageView4,R.id.imageView5,R.id.imageView6,R.id.imageView8};     int [] photos = {R.drawable.aa,R.drawable.pp             ,R.drawable.ee,             R.drawable.pp_blue,R.drawable.ll};     @覆盖     protected void onCreate(Bundle savedInstanceState){         super.onCreate(savedInstanceState);         的setContentView(R.layout.activity_main);         //用于随机化视图          随机rng = new Random();          List generated = new ArrayList();          for(int i = 0; i&lt; 5; i ++)          {            而(真)            {               整数next = rng.nextInt(5);               if(!generated.contains(next))               {                  generated.add(下);                  ImageView iv =(ImageView)findViewById(imageViews [i]);                  iv.setImageResource(照片[下一个]);                  打破;               }             }          } ///随机结束

}`