我有可绘制的图像,我将这些图像随机播放但是我希望 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]);
}
任何人都可以帮我解决这个问题吗?
答案 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,你可以动态删除条目。