3

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, ... に変更する必要がありますが、そうしたくありません。

それを実装する方法について何か提案はありますか?ありがとうございました。

4

6 に答える 6

15

1 つの方法は、必要なイメージの ID を持つ配列を作成することです。そして、その配列からランダムに 1 つ取得します。そのアプローチは、他の回答で説明されています。

別の方法は、プロジェクトのフォルダーにファイルを作成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);

3 番目の方法は、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 に答える