[英]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);
}
});
查看您的代碼,將所有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());
}
這是我的回答,其他嘗試僅顯示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()));
}
});
好吧,您也不必為了使它正常工作而需要更改很多代碼;)很抱歉,我將所有內容打包在一行中。 但是Iam真的很累,因為在德國快到午夜了。
這是同一張圖片,因為“ 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);
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.