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
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 回答
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 回答