Android版:4.2
我正在开发一个Android应用程序。我需要随机生成可绘制文件夹中的图像。在我的drawable中我有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
,...我不想这样做。
有关如何实施的任何建议?谢谢。
答案 0 :(得分:14)
一种方法是使用所需图像的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();
}
答案 1 :(得分: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]);
如果您希望图像的绝对文件路径重命名,请参阅this article了解详细信息。
答案 2 :(得分:2)
怎么样
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]));
答案 3 :(得分: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);
答案 4 :(得分:0)
您还必须看到这个问题或答案: -
Randomize string from resources android
但你必须更换
textview.setText()
到
img.setImageResource(ran.nextInt(trivias.length)]);`
答案 5 :(得分: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方法中