如何随机选择资源(R.drawable.xxxx)

chi*_*kar 6 android android-image

我想显示我存储在res/drawable中的一堆图像中的随机图像.

我知道的唯一技术是,如果您知道其资源ID,则访问特定图像.有没有办法通过使用文件名或其他东西(可以在运行时构建)访问图像?

我想在运行时随机选择一个图像.任何建议/想法赞赏:)

谢谢Chinmay

rha*_*ter 18

我意识到这是一个非常古老的问题,但希望为任何Google员工提供一个好的解决方案.

按名称访问资源的效率远低于id.资源系统的重点在于您不必解析名称,而是可以使用ID.

您需要做的是使用阵列资源类型.按照我的简单步骤!我制作随机图片......好玩!

  1. 创建一个包含要从中选择的所有图像的阵列资源.我把它放在我的res/values/arrays.xml文件中,但它真的可以去任何地方.

    <array name="loading_images">
        <item>@drawable/bg_loading_1</item>
        <item>@drawable/bg_loading_2</item>
        <item>@drawable/bg_loading_3</item>
        <item>@drawable/bg_loading_5</item>
        <item>@drawable/bg_loading_6</item>
        <item>@drawable/bg_loading_7</item>
        <item>@drawable/bg_loading_8</item>
    </array>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 接下来,得到了TypedArray来自Resources并用它来选择一个随机图像.

    TypedArray images = getResources().obtainTypedArray(R.array.loading_images);
    int choice = (int) (Math.random() * images.length());
    mImageView.setImageResource(images.getResourceId(choice, R.drawable.bg_loading_1));
    images.recycle();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 利润!


Dan*_*yer 5

您也可以按名称访问资源,如果您知道资源的名称或可以根据某些预定义的命名方案派生它们,则这可能是解决问题的可行方法。

您必须使用类的getIdentifier方法将名称映射到标识符Resources

String name = "resource" + rng.nextInt(count);
int resource = getResources().getIdentifier(name, "drawable", "com.package");
Run Code Online (Sandbox Code Playgroud)

此方法的文档说:

注意:不建议使用此功能。按标识符检索资源比按名称检索资源要有效得多。

的确如此,但是如果您在对性能不敏感的代码中进行操作,则不必担心。

另外,如果您不介意以XML列出资源,则可以创建一个有类型的数组,然后可以从中随机选择。