android中的随机图像

时间:2013-01-24 09:56:56

标签: java android

我有可绘制的图像,我将这些图像随机播放但是我希望 R.drawable.a 这个图像来5 时间和< strong>这个 R.drawable.b 来了10次但是我的代码图片一次又一次地来了。

我的问题是,我希望该图片 R.drawable.a 在图片 R.drawable.a 从列表中移除后出现5次,其他图片出现洗牌所有图像。 但在平均时间图像中, R.drawable.a 来n次

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

任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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--;
    }
} 

答案 2 :(得分: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,你可以动态删除条目。