使用random时每个ImageView如何显示不同的图片? Android 工作室
How can each ImageView show a different picture when using random? Android Studio
我随机设置了 4 张图片,但当我测试时,结果显示相同的图片。我希望每个图像视图显示与其他图像不同的图像。
这是我的代码:
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);
}
});
这是同一张图片,因为 "id" 只设置一次,要获得不同的 ID,您必须生成更多随机数。您需要调用 rand.nextInt(4) 四次。在每个“.setImageResource(id)”
之后
只是给你一个想法。
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);
查看您的代码,您将所有 4 张照片替换为相同的图片(例如 "img1" 或 "img2" 或 "img3" 或 "img4")
如果您想用不同的图片替换 4 张图片,只需调用:
int rndInt = rand.nextInt(4) + 1;
String imgName = "img" + rndInt;
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
每次在将资源 ID 分配给 ImageView 之前。
创建一个函数,例如:
private int getRandomImage() {
int rndInt = rand.nextInt(4) + 1;
String imgName = "img" + rndInt;
return getResources().getIdentifier(imgName, "drawable", getPackageName());
}
并调用每个 ImageView
pic1.setImageResource(getRandomImage());
pic2.setImageResource(getRandomImage());
pic3.setImageResource(getRandomImage());
pic4.setImageResource(getRandomImage());
编辑:
如果您想拥有 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());
}
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);
}
这是我的回答,其他尝试只显示 4 张不同的图像。我的解决方案提供的图像是随机的且不相同:
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()));
}
});
此外,您无需更改太多代码即可使其工作;)
抱歉,我把所有东西都打包成一行。但是我真的很累,因为在德国已经快午夜了。
我随机设置了 4 张图片,但当我测试时,结果显示相同的图片。我希望每个图像视图显示与其他图像不同的图像。
这是我的代码:
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);
}
});
这是同一张图片,因为 "id" 只设置一次,要获得不同的 ID,您必须生成更多随机数。您需要调用 rand.nextInt(4) 四次。在每个“.setImageResource(id)”
之后只是给你一个想法。
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);
查看您的代码,您将所有 4 张照片替换为相同的图片(例如 "img1" 或 "img2" 或 "img3" 或 "img4")
如果您想用不同的图片替换 4 张图片,只需调用:
int rndInt = rand.nextInt(4) + 1;
String imgName = "img" + rndInt;
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
每次在将资源 ID 分配给 ImageView 之前。
创建一个函数,例如:
private int getRandomImage() {
int rndInt = rand.nextInt(4) + 1;
String imgName = "img" + rndInt;
return getResources().getIdentifier(imgName, "drawable", getPackageName());
}
并调用每个 ImageView
pic1.setImageResource(getRandomImage());
pic2.setImageResource(getRandomImage());
pic3.setImageResource(getRandomImage());
pic4.setImageResource(getRandomImage());
编辑:
如果您想拥有 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());
}
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);
}
这是我的回答,其他尝试只显示 4 张不同的图像。我的解决方案提供的图像是随机的且不相同:
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()));
}
});
此外,您无需更改太多代码即可使其工作;) 抱歉,我把所有东西都打包成一行。但是我真的很累,因为在德国已经快午夜了。