Android:生成不重复的随机图像
我在Android应用程序上制作不可重复的随机图像时遇到问题 比如说,在我的应用程序中,我有前3个部分,我有13张图片。我需要一种方法,从@drawable上的13张图片中生成3张随机图片,但这3张图片应该彼此不同 例如:它不能是img1、img1、img2或前三部分的img1、img1、img1,但应该是img1、img2、img3 到目前为止,我已经掌握了这个方法: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);
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,但在这种情况下,图像是随机的,每个图像按钮都指向不同的活动耳鼻喉科活动。
}`