[英]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 : 我有2个列表,一个用于imageviews的数组和一个用于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. 现在,当我单击特定的星形(或者可以在onCreate方法中)时,应将其相应地随机化。
Random drawable in a random imageview : 在随机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? 所以我想知道在for循环中使用的最后一个drawable是什么,以便可以在其中设置标签?
Just keep a reference to the last ImageView
outside the loop. 只需保留循环外最后一个
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;
}
}
}
And, unless it serves some other purpose, you could also probably call imageadd()
and viewadd()
only once, and not on every onClick()
. 并且,除非它有其他用途,否则您也可能只调用
imageadd()
和viewadd()
,而不是在每个onClick()
上调用。 You would just have to skip calling images.remove()
and imageViews.remove()
from inside your loop then. 你只需要跳过调用
images.remove()
和imageViews.remove()
从你的循环内即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.