简体   繁体   中英

How to know what was the last drawable used from randomized arraylist?

I have 2 list, an array for imageviews and an array for the drawables :

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

Here is where I add items in each list.

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

}

Now when I click on a specific star (or could be in the onCreate method), it should be randomized accordingly.

Random drawable in a random imageview :

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

                    }

                }

         }

    };

And so I want to know what was the last drawable used inside the for loop so I can set tag in it?

Just keep a reference to the last ImageView outside the loop.

// 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;
        }
    }
}

And, unless it serves some other purpose, you could also probably call imageadd() and viewadd() only once, and not on every onClick() . You would just have to skip calling images.remove() and imageViews.remove() from inside your loop then.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM