Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:生成不重复的随机图像_Android - Fatal编程技术网

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

Android:生成不重复的随机图像,android,Android,我在Android应用程序上制作不可重复的随机图像时遇到问题 比如说,在我的应用程序中,我有前3个部分,我有13张图片。我需要一种方法,从@drawable上的13张图片中生成3张随机图片,但这3张图片应该彼此不同 例如:它不能是img1、img1、img2或前三部分的img1、img1、img1,但应该是img1、img2、img3 到目前为止,我已经掌握了这个方法: final Button imgView = (Button)findViewById(R.id.top1);

我在Android应用程序上制作不可重复的随机图像时遇到问题

比如说,在我的应用程序中,我有前3个部分,我有13张图片。我需要一种方法,从@drawable上的13张图片中生成3张随机图片,但这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);
在我的布局中,我将前3部分中的一个图像ID指定为top1。我仍然有top2的id,top3是top3部分的id。上面的代码将查找我的可绘制图像,这些图像的名称为'img1.jpg','img2.jpg','img3.jpg','img4.jpg',等等

我愿意接受任何解决办法。如果有人能即兴创作我的代码,让3张图片彼此不一样,那就太完美了。但如果你们中有人能用一种新方法提供更好的解决方案,我愿意接受

谢谢。

只是一个想法:


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

我建议您将图像id存储在
列表中
,使用 并通过删除来检索第一个元素

//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);

列表的初始化应该在image add方法之外执行一次(可能在
onCreate
中的某个地方。

u可以尝试此操作以获取视图中的随机图像…这对我有用….`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}; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //用于随机化视图 随机rng=新随机(); 生成的列表=新的ArrayList(); 对于(int i=0;i<5;i++) { while(true) { 整数next=rng.nextInt(5); 如果(!generated.contains(下一步)) { 已生成。添加(下一步); ImageView iv=(ImageView)findViewById(ImageView[i]); iv.setImageResource(照片[下一页]); 打破 } } }///随机循环结束

}`       

第一:你不能像那样复制你的代码,创建一个方法。第二:你总是将
id
设置为ImageView的后台资源,我认为它应该分别是id、id2和id3。第三:如果你遇到崩溃并需要帮助,你最好提供导致崩溃的异常的堆栈跟踪。有一点语法错误和错误是的,谢谢你的更正。无论如何,如果我想让每张图片都指向不同的活动,该怎么办?13张不同的图片有13个不同的活动。将它们放入
Intent
?我不确定我是否明白你的问题。当然我知道我需要Intent,但在这种情况下,图像是随机的,每个图像按钮都指向不同的活动耳鼻喉科活动。
}`