2013-03-21 98 views
3

Android版本:4.2
我正在开发一个android应用程序。我需要随机生成可绘制文件夹中的图像。在我的drawable中,我有45个不同名字的图像。 我的XML代码:Android中的可绘制文件夹的图像随机genaration

<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); 

但有了这个代码,我需要改变我的形象名称photo1photo2 ...和我不我想要这样做。

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

回答

12

一种方法是创建所需的图像的ID的数组。从该阵列中随机选取一个。其他答案解释了这种方法。

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

<?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中抽取随机字段。可抽取类:

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(); 
} 
+0

thanq vasart ..第三种形式完美地工作,谢谢你。:) – Neeha 2013-03-21 11:41:42

+0

嗨vasart ..有没有办法得到哪个字段是随机选择我的意思是图像名称??? – Neeha 2013-03-21 12:40:38

+0

是的,你可以做到这一点:'字段[rndInt] .getName()' – vasart 2013-03-21 12:44:02

1

如何

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])); 
+0

Thanq ngesh.I跟着ur代码,但它显示我这个错误:类型ImageView中的方法setImageResource(int)不适用于参数(长) – Neeha 2013-03-21 11:20:15

+0

@ user2130831 ..请参阅我的编辑.. – ngesh 2013-03-21 11:31:49

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); 
1

具体谈谈你的问题 - 你究竟想做什么?

,如果你想显示在随机顺序比这个图像将是最好的

 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了解详情。

相关问题