1

私はドローアブルに画像を持っていて、これらの画像をシャッフルしますが、 R.drawable.aこの画像が 5回来て、 この R.drawable.bが 10 回来るようにしたいのですが、私のコード画像では何度も来ます。

私の質問は、その画像R.drawable.aがリストから削除され、他の画像がすべての画像をシャッフルした後、その画像がR.drawable.a に5回来ることです。しかし、その間に R.drawable.a をイメージして ください

public void addNewImageToScreen() {
    //array of all drawable id's
    int pics[] = { R.drawable.a, R.drawable.b, R.drawable.c, ...etc...};
    Random rand = new Random();
    int pos = rand.nextInt(pics.length);
    addNewImageToScreen(pics[pos]);
}

これがどのように可能であるかを誰かが助けてくれますか?

4

3 に答える 3

3

以前に示したものを削除する必要があります

 addNewImageToScreen(pics[pos]);

int arraySize=pics.length;
pics[pos] = pics[--arraySize];

編集:またはこのロジックを使用

ArrayList picsarr=Arrays.asList(pics);
for(int i=0;i<picsarr.size;i++)
{
Collections.shuffle(picsarr);
 addNewImageToScreen(picsarr.get[i]);
picsarr.remove(i);
}
于 2013-01-24T10:01:57.860 に答える
1

この男とのいくつかの議論の後、これが彼が望んでいることのようです:

private ArrayList<Integer> mDrawableIds = new ArrayList<Integer>();

        private void populateList() {
                mDrawableIds.add(R.drawable.a);
                mDrawableIds.add(R.drawable.b);
                mDrawableIds.add(R.drawable.c);
        }

private int returnImageResource(int buttonClickCount) {
        int imageResource = -1;

        switch (buttonClickCount) {
                case 1:
                        imageResource = mDrawableIds.get(0);
                        break;

                case 2:
                        imageResource = mDrawableIds.get((int) (Math.random() * mDrawableIds.size()));
                        break;

                case 3:
                        imageResource = mDrawableIds.get(1);
                        break;

                        // more cases here

                case 10:
                        imageResource = mDrawableIds.get((int) (Math.random() * mDrawableIds.size()));
                        mDrawableIds.remove(0);
                        break;
                }

        return imageResource;
    }

いくつかのコードを省略しましたが、これで始められるはずです。あなたが欠けていたのは、エントリを動的に削除できる ArrayList でした。

于 2013-01-29T11:22:29.893 に答える
1
Try this code i think it will help you but i am not sure in my case it works fine

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--;
    }
} 
于 2013-01-24T12:19:38.920 に答える