java - 如何随机化图像阵列

标签 java android arrays

我有一个图像数组,在我从中选择一个带有 ID 编号的图像之前,我想知道是否可以将它们随机化,以便每次运行应用程序时同一张图像都可以具有不同的 ID 编号?

我的图像数组:

<array name="PairImages">
    <item>@drawable/a</item>
    <item>@drawable/b</item>
    <item>@drawable/c</item>
    <item>@drawable/d</item>
    <item>@drawable/e</item>
    <item>@drawable/f</item>
    <item>@drawable/g</item>
    <item>@drawable/h</item>
    <item>@drawable/i</item>
    <item>@drawable/j</item>
</array>

我用来用数组中的图像填充 ImageView 的代码:

ImageView FirstImageCard, SecondImageCard, ThirdImageCard, FourthImageCard, FifthImageCard, SixthImageCard, SeventhImageCard, EightImageCard;

@Override
protected void onCreate(Bundle savedInstanceState) {
    this.getWindow().getDecorView().setSystemUiVisibility(getSystemUiFlags());
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FirstImageCard = (ImageView)findViewById(R.id.imageView);
    SecondImageCard = (ImageView)findViewById(R.id.imageView2);
    ThirdImageCard = (ImageView)findViewById(R.id.imageView3);
    FourthImageCard = (ImageView)findViewById(R.id.imageView4);
    FifthImageCard = (ImageView)findViewById(R.id.imageView5);
    SixthImageCard = (ImageView)findViewById(R.id.imageView6);
    SeventhImageCard = (ImageView)findViewById(R.id.imageView7);
    EightImageCard = (ImageView)findViewById(R.id.imageView8);

    final TypedArray ImageArray = getResources().obtainTypedArray(R.array.PairImages);

    FirstImageCard.setImageResource(ImageArray.getResourceId(0, -1));
    SecondImageCard.setImageResource(ImageArray.getResourceId(1, -1));
    ThirdImageCard.setImageResource(ImageArray.getResourceId(2, -1));
    FourthImageCard.setImageResource(ImageArray.getResourceId(3, -1));
    FifthImageCard.setImageResource(ImageArray.getResourceId(4, -1));
    SixthImageCard.setImageResource(ImageArray.getResourceId(5, -1));
    SeventhImageCard.setImageResource(ImageArray.getResourceId(6, -1));
    EightImageCard.setImageResource(ImageArray.getResourceId(7, -1));
}

最佳答案

您几乎已经完成了所有工作,您只需要一个数组或列表来保存您的 id 值,然后将它们随机化。看看shuffle .

你的代码最终会是这样的:

//...

final TypedArray ImageArray = getResources().obtainTypedArray(R.array.PairImages);

//Just a holder for random numbers. 
//If you add/remove an image make sure you change the 8...
ArrayList<Integer> randomNumbers = new ArrayList<>();
for (int i = 0; i < 8; i++){
    randomNumbers.add(i);
}
Collections.shuffle(randomNumbers);
int i = 0;


FirstImageCard.setImageResource(ImageArray.getResourceId(randomNumbers.get(i++), -1));
SecondImageCard.setImageResource(ImageArray.getResourceId(randomNumbers.get(i++), -1));
ThirdImageCard.setImageResource(ImageArray.getResourceId(randomNumbers.get(i++), -1));
FourthImageCard.setImageResource(ImageArray.getResourceId(randomNumbers.get(i++), -1));
FifthImageCard.setImageResource(ImageArray.getResourceId(randomNumbers.get(i++), -1));
SixthImageCard.setImageResource(ImageArray.getResourceId(randomNumbers.get(i++), -1));
SeventhImageCard.setImageResource(ImageArray.getResourceId(randomNumbers.get(i++), -1));
EightImageCard.setImageResource(ImageArray.getResourceId(randomNumbers.get(i++), -1));

//...

您也可以尝试立即使用类似 question 中的随机数构建数组。 ,但我认为洗牌目前还可以。

关于java - 如何随机化图像阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34602101/

相关文章:

java - 无法从 Android 中的 Web 服务解析

php复选框保留页面之间的值

java - Android:指定数组大小?

php - 从 android 到 JSON 到 mysql Arabic

c - 在 C 中释放二维数组的问题

java - sohronit如何将pdf文件中的byte字节[]分页并恢复回来

java - 如果输入已知,则继续询问输入

java - 阻止 Hibernate 在关联集合中保留更改

java - 如何通过Gradle和-D将系统属性赋予我的测试

android - RecyclerView致命异常:main