0

アクティビティに16のimageviewsがあります......img1->img16という名前です。各画像ビューに差分画像が必要ですが、これをハードコーディングすることはできません。たとえば、1、2、3 ....など、追加で渡される番号に応じて、これらのビューに追加される画像は異なる必要があります。

私は現在16枚の画像を追加するコードを持っていますが、これらは一意ではありません.....それらは複製されています...

        int[] imageViews = {
            R.id.img1, R.id.img2,
            R.id.img3, R.id.img4,
            R.id.img5, R.id.img6,
            R.id.img7, R.id.img8,
            R.id.img9, R.id.img10,
            R.id.img11, R.id.img12,
            R.id.img13, R.id.img14,
            R.id.img15, R.id.img16
            };

    int[] images = {
            R.drawable.img1, R.drawable.img2,
            R.drawable.img3, R.drawable.img4,
            R.drawable.img5, R.drawable.img6,
            R.drawable.img7, R.drawable.img8,
            R.drawable.img9, R.drawable.img10,
            R.drawable.img11, R.drawable.img12,
            R.drawable.img13, R.drawable.img14,
            R.drawable.img15, R.drawable.img16
            };


    Random random = new Random(System.currentTimeMillis());

        for(int v : imageViews) 
        {
                ImageView iv = (ImageView)findViewById(v);
                iv.setImageResource(images[random.nextInt(images.length - 1)]);
        }

また、可能であれば、渡された番号によって画像が異なるため、画像が画像配列にハードコーディングされないようにする必要があります。

したがって、これらの画像は1番のものですが、2番がアクティビティに渡された場合、画像は異なります。

すべての詳細はローカルデータベースに保存され、画像はすべてドローアブルフォルダにあり、すべて同じ命名スタイルに従います。たとえば、img1からimg100...までです。

よろしくお願いします。

/更新/

こんにちは、私は次のコードでそれを試しました:

Random random = new Random(System.currentTimeMillis());
    List<Integer> generated = new ArrayList<Integer>();
        for(int v : imageViews) 
        {
             int next = random.nextInt(15) + 1;
             if (!generated.contains(next))
             {
                generated.add(next);
                ImageView iv = (ImageView)findViewById(v);
                iv.setImageResource(images[next]);
             }
        }

私はそこで完全に間違っているかもしれません....しかし、これまでのところ、重複は見つかりませんでしたが、ギャップを助けません。16のランダムなintを生成するかのように、一意のintを追加するだけです。あなたが理解しているなら、16のユニークな画像に達するまで生成するのではなく?

その面で何かアイデアはありますか?

4

1 に答える 1

1

次のランダムな int を取得するたびに、その値を配列に保持します。次に、ランダムな int を取得したときに、その数値が既に選択されているかどうかを確認します。選択されている場合は、選択されていない int が選択されるまでプロセスを繰り返します。

編集:このコードを試してください:

Random random = new Random( System.currentTimeMillis() );
List<Integer> generated = new ArrayList<Integer>();
for (int i = 0; i < imageViews.length; i++) {

    int v = imageViews[i];
    int next = random.nextInt( 15 ) + 1;
    if ( !generated.contains( next ) ) {
        generated.add( next );
        ImageView iv = (ImageView) findViewById( v );
        iv.setImageResource( images[next] );
    }
    else {
        i--;
    }
}
于 2012-06-04T17:39:42.877 に答える