3

Android 版本:4.2
我正在开发一个 android 应用程序。我需要从可绘制文件夹随机生成图像。在我的可绘制对象中,我有 45 张不同名称的图像。我的xml代码是:

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

我试过这段代码:

ImageView img=(ImageView)findViewById(R.id.imageView1);
Random rand = new Random();
int rndInt = rand.nextInt(52) + 1;
String drawableName = "photo"+ rndInt;

int resID = getResources().getIdentifier(drawableName, "drawable",  getPackageName());
img.setImageResource(resID);

但是使用此代码,我需要将图像名称更改为photo1, photo2, ... 我不想这样做。

关于如何实施它的任何建议?谢谢你。

4

6 回答 6

15

一种方法是创建一个具有所需图像 ID 的数组。并从该数组中随机取一个。该方法在其他答案中进行了解释。

random_images_array.xml另一种方法是在项目的文件夹中创建文件values并像这样填充它:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <array name="apptour">
        <item>@drawable/image_1</item>
        <item>@drawable/photo_2</item>
        <item>@drawable/picture_4</item>
    </array>

</resources>

然后您可以从该 xml 数组中获取随机图像:

final TypedArray imgs = getResources().obtainTypedArray(R.array.random_images_array);
final Random rand = new Random();
final int rndInt = rand.nextInt(imgs.length());
final int resID = imgs.getResourceId(rndInt, 0);

第三种方法是从 R.drawable 类中获取随机字段:

final Class drawableClass = R.drawable.class;
final Field[] fields = drawableClass.getFields();

final Random rand = new Random();
int rndInt = rand.nextInt(fields.length);
try {
    int resID = fields[rndInt].getInt(drawableClass);
    img.setImageResource(resID);
} catch (Exception e) {
    e.printStackTrace();
}
于 2013-03-21T11:21:26.653 回答
3

怎么样

long[] res = {R.drawable.image1, R.drawable.image2};

或者

int[] res = {R.drawable.image1, R.drawable.image2};

 int rndInt = rand.nextInt(res .length);



img.setImageDrawable(getResources().getDrawable(res[rndInt]));
于 2013-03-21T11:12:34.900 回答
3

明确你的问题——你真正想做什么?

如果您想以随机顺序显示图像,这将是最好的

        int resId[]={R.drawable.p1,R.drawable.p2,R.drawable.p2};
         Random rand = new Random();
         int index = rand.nextInt((resId.length- 1) - 0 + 1) + 0;

         imgView.setImageResource(resId[index]);

如果您希望图像的绝对文件路径对其进行重命名,请参阅本文了解详细信息。

于 2013-03-21T11:22:56.703 回答
1
ImageView img=(ImageView)findViewById(R.id.imageView1);
String[] imageArray = {"Image1", "Image2", etc..};
Random rand = new Random();

int rndInt = rand.nextInt(52) + 1;
int resID = getResources().getIdentifier(imageArray[rand], "drawable",  getPackageName());
img.setImageResource(resID);
于 2013-03-21T11:19:03.177 回答
0

您还必须看到这个问题或答案:-

从资源android中随机化字符串

但你必须更换

textview.setText()

img.setImageResource(ran.nextInt(trivias.length)]);`
于 2013-03-21T11:17:05.313 回答
0

我发现使用所有可绘制对象设置一个数组,然后通过随机数获取随机索引是可行的。

public int[] Images = {R.drawable.1, R.drawable.2, R.drawable.3};

进而

ImageView EightBallImage = findViewById(R.id.EightBallImage);
EightBallImage.setImageResource(Images[new Random().nextInt(Images.length)]);

在点击侦听器内或仅在 onCreate 方法中

于 2020-10-28T17:37:57.410 回答