如何知道随机arraylist使用的最后一个drawable?

时间:2015-01-19 00:52:45

标签: java android random

我有2个列表,一个用于imageviews的数组和一个用于drawables的数组:

List<Integer> imageViews = new ArrayList<Integer>();
List<Integer> images = new ArrayList<Integer>();

这是我在每个列表中添加项目的地方。

public void viewadd()
{
    imageViews.add(R.id.star1);
    imageViews.add(R.id.star2);
    imageViews.add(R.id.star3);
    imageViews.add(R.id.star4);
    imageViews.add(R.id.star5);
    imageViews.add(R.id.star6);
    imageViews.add(R.id.star7);
    imageViews.add(R.id.star8);
    imageViews.add(R.id.star9);
    imageViews.add(R.id.star10);
    imageViews.add(R.id.star11);
    imageViews.add(R.id.star12);
}

public void imageadd()
{

    images.add(R.drawable.blue);
    images.add(R.drawable.red);
    images.add(R.drawable.green);
    images.add(R.drawable.violet);
    images.add(R.drawable.orange);
    images.add(R.drawable.yellow);
    images.add(R.drawable.blue);
    images.add(R.drawable.red);
    images.add(R.drawable.green);
    images.add(R.drawable.violet);
    images.add(R.drawable.orange);
    images.add(R.drawable.yellow);

}

现在当我点击一个特定的星(或者可能在onCreate方法中)时,它应该相应地随机化。

在随机图像视图中随机绘制:

    View.OnClickListener tapHandler = new View.OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub


             imageadd();
                viewadd();


               Random rng = new Random(); 
                List<Integer> generated = new ArrayList<Integer>();
                for (int i = 0; i < 12; i++)
                {
                  while(true)
                    {

                      Integer next = rng.nextInt(imageViews.size()) ;
                      if (!generated.contains(next))
                        {
                         generated.add(next);
                         ImageView iv = (ImageView)findViewById(imageViews.get(next));
                         iv.setImageResource(images.get(next));
                         images.remove(next);
                         imageViews.remove(next);
                         break;
                        }

                    }

                }

         }

    };

所以我想知道for循环中使用的最后一个drawable是什么,所以我可以在其中设置标签?

1 个答案:

答案 0 :(得分:1)

只需保留对循环外的最后一个ImageView的引用。

// last image reference
Drawable lastImg = null;

List<Integer> generated = new ArrayList<Integer>();
for (int i = 0; i < 12; i++) {
    while (true) {
        Integer next = rng.nextInt(imageViews.size());
        if (!generated.contains(next)) {
            generated.add(next);
            ImageView iv = (ImageView) findViewById(imageViews
                    .get(next));
            iv.setImageResource(images.get(next));

            // skip when i = 0
            if (lastImg != null) {
                iv.setTag(lastImg); // tag the last drawable
            }

            // store the current drawable
            lastImg = getResources().getDrawable(images.get(next));

            images.remove(next);
            imageViews.remove(next);
            break;
        }
    }
}

并且,除非它用于其他目的,否则您也可能只调用imageadd()viewadd()一次,而不是每onClick()。您只需跳过循环内的images.remove()imageViews.remove()即可。