Android:循环从ArrayList中选择一个随机图像

时间:2013-11-24 23:31:06

标签: java android arrays loops random

现在我的程序从我的数组列表中随机显示5个随机图像,这是我现在拥有的主要部分:

int myImgCount;
int totalImgCount;
int[] array1;

public void surfaceCreated(SurfaceHolder holder) {

ArrayList<Integer> list = new ArrayList<Integer>();

    Random r = new Random();

    int[] images = new int[] { R.drawable.one, R.drawable.two,
            R.drawable.three, R.drawable.four, R.drawable.five };

    int totalImgCount = 0;


    for (int i = 0; i<50; i++)
    {
        while (true) 
        {
            int myImgCount = r.nextInt(5);

                 totalImgCount += myImgCount + 1;

            if (totalImgCount<50) {

                list.add(images[myImgCount]);   //do it again if not yet at 50
                break;
            }
                   totalImgCount -= (myImgCount + 1);
        }


    }

    array1 = convertIntegers(list);

}

public static int[] convertIntegers(List<Integer> integers) {
    int[] ret = new int[integers.size()];
    Iterator<Integer> iterator = integers.iterator();
    for (int i = 0; i < ret.length; i++) {
        ret[i] = iterator.next().intValue();
    }
    return ret;
}

我现在在我的渲染方法中遇到错误导致应用程序崩溃:

public void render(Canvas canvas) {

    if (canvas != null) {

        Log.d(TAG, "Start Random");
        Random random = new Random();
        canvas.drawRGB(234, 237, 235);

        for (int i=0; i<5; i++) {
          Bitmap bmp = BitmapFactory.decodeResource(getResources(), array1[i]);            
       // ^This is where I am now getting an error that is causing the app to crash 

          canvas.drawBitmap(bmp,random.nextInt(canvas.getWidth()-bmp.getWidth
                      ()), random.nextInt(canvas.getHeight()-bmp.getHeight()),null);

        }

    }
}

我要做的是让每个可绘制图像都有一个整数值,例如:R.drawable.one等于1,R.drawable.two等于2 ..... R.drawable.five等于到5。

重复循环,直到显示的图像等于总值50(它们都加起来为50),然后停止。

我正在尝试获取myImgCount和totalImgCount以跟踪随机选择的图像的值,我知道它不对,但我找不到有关如何完成此任务的任何信息。提前感谢任何可以提供帮助的人,我是新手编码所以如果你能解释为什么你使用你的代码它会更有帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将可绘制的命名约定用作R.drawable.image1,R.drawable.image2并使用

for(int i=0;i<50;i++) {
  a[i] = getResources().getIdentifier("image"+(i+1), "drawable", getPackageName());
}

有关getIdentifier方法here的详细信息:

希望这有帮助