[英]How can each ImageView show a different picture when using random? Android Studio
I have 4 images set on random, but when I test it out the result shows the same pictures. 我随机设置了4张图像,但是当我进行测试时,结果显示的图像相同。 I want each image view to show an image different from the others.
我希望每个图像视图都显示与其他图像不同的图像。
This is my code: 这是我的代码:
final ImageButton imageButton=(ImageButton) findViewById(R.id.imageView);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageButton.setVisibility(View.INVISIBLE);
pic1 = (ImageView) findViewById(R.id.imageView2);
pic2 = (ImageView) findViewById(R.id.imageView3);
pic3 = (ImageView) findViewById(R.id.imageView4);
pic4 = (ImageView) findViewById(R.id.imageView5);
Random rand = new Random();
int rndInt = rand.nextInt(4) + 1;
String imgName = "img" + rndInt;
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
pic1.setImageResource(id);
pic2.setImageResource(id);
pic3.setImageResource(id);
pic4.setImageResource(id);
}
});
Looking to your code you replace ALL the 4 pic with the same image (for example "img1" or "img2" or "img3" or "img4") 查看您的代码,将所有4张图片替换为同一张图片(例如“ img1”或“ img2”或“ img3”或“ img4”)
if you want to replace the 4 pic with different image simply call: 如果要用其他图片替换4图片,只需调用:
int rndInt = rand.nextInt(4) + 1;
String imgName = "img" + rndInt;
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
every time before assign the resource id to the ImageView. 每次将资源ID分配给ImageView之前。
Create a function for example: 创建一个函数,例如:
private int getRandomImage() {
int rndInt = rand.nextInt(4) + 1;
String imgName = "img" + rndInt;
return getResources().getIdentifier(imgName, "drawable", getPackageName());
}
and call for each ImageView 并要求每个ImageView
pic1.setImageResource(getRandomImage());
pic2.setImageResource(getRandomImage());
pic3.setImageResource(getRandomImage());
pic4.setImageResource(getRandomImage());
EDIT: 编辑:
If you want to have 4 DIFFERENT images you can change the getRandomImage() with: 如果要具有4个不同的图像,可以使用以下方法更改getRandomImage():
List<Integer> listImageUsed = new ArrayList<Integer>();
private int getRandomImage() {
int rndInt;
do {
rndInt = rand.nextInt(4) + 1;
} while (!listImageUsed.contains(rndInt));
listImageUsed.add(rndInt);
String imgName = "img" + rndInt;
return getResources().getIdentifier(imgName, "drawable", getPackageName());
}
here is my answere, the other attemps are displaying just 4 different images. 这是我的回答,其他尝试仅显示4个不同的图像。 My solution provides, that the images are random and not identical:
我的解决方案提供的图像是随机的并且不相同:
final ImageButton imageButton=(ImageButton) findViewById(R.id.imageView);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageButton.setVisibility(View.INVISIBLE);
pic1 = (ImageView) findViewById(R.id.imageView2);
pic2 = (ImageView) findViewById(R.id.imageView3);
pic3 = (ImageView) findViewById(R.id.imageView4);
pic4 = (ImageView) findViewById(R.id.imageView5);
ArrayList<Integer> imageIds= new ArrayList<>(Arrays.asList(1, 2, 3, 4))
Collections.shuffle(imageIds);
pic1.setImageResource(getResources().getIdentifier("img" + imageIds[0], "drawable", getPackageName()));
pic2.setImageResource(getResources().getIdentifier("img" + imageIds[1], "drawable", getPackageName()));
pic3.setImageResource(getResources().getIdentifier("img" + imageIds[2], "drawable", getPackageName()));
pic4.setImageResource(getResources().getIdentifier("img" + imageIds[3], "drawable", getPackageName()));
}
});
Well also you don't have to change much of your code to make it work ;) Sorry that i packed everything in one line. 好吧,您也不必为了使它正常工作而需要更改很多代码;)很抱歉,我将所有内容打包在一行中。 But Iam really tired for in germany it is almost midnight.
但是Iam真的很累,因为在德国快到午夜了。
It is the same image because "id" only get set once, to get difference Id's you would have to generate more random numbers. 这是同一张图片,因为“ id”仅设置一次,要获得差值ID,您将必须生成更多随机数。 You need to call rand.nextInt(4) four times.
您需要调用rand.nextInt(4)四次。 Once after each ".setImageResource(id)"
每个“ .setImageResource(id)”之后
Just to give you an idea. 只是给你一个想法。
Random rand = new Random();
int rndInt = rand.nextInt(4) + 1;
String imgName = "img" + rndInt;
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
pic1.setImageResource(id);
//Here you re-generate a random number
rndInt = rand.nextInt(4) + 1;
imgName = "img" + rndInt;
id = getResources().getIdentifier(imgName, "drawable", getPackageName());
pic2.setImageResource(id);
final ImageButton imageButton=(ImageButton) findViewById(R.id.imageView);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageButton.setVisibility(View.INVISIBLE);
pic1 = (ImageView) findViewById(R.id.imageView2);
pic2 = (ImageView) findViewById(R.id.imageView3);
pic3 = (ImageView) findViewById(R.id.imageView4);
pic4 = (ImageView) findViewById(R.id.imageView5);
setRandomImage(pic1);
setRandomImage(pic2);
setRandomImage(pic3);
setRandomImage(pic4);
}
});
private void setRandomImage(ImageView imgView)
{
Random rand = new Random();
int rndInt = rand.nextInt(4) + 1;
String imgName = "img" + rndInt;
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
imgView.setImageResource(id);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.