Android版:4.2
我正在开发一个Android应用程序。我需要随机生成可绘制文件夹中的图像,并设置文本以说明选择了哪个卡。
我希望我的应用程序能够枚举随机选择的每张卡片而不重复 直到52张牌组结束。
我怎么能实现这个目标?
我的xml代码是:
<ImageView
android:id="@+id/imageView"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_centerInParent="true"
android:scaleType="centerInside"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="16dp" />
在我的抽签中,我有52张不同名字的扑克牌图片。
public class MainActivity extends AppCompatActivity {
ImageView imageView;
TextView txt1;
Button button;
Random r;
Integer[] images = {
R.drawable.ace_of_hearts,
R.drawable.two_of_hearts,
R.drawable.three_of_hearts,
R.drawable.four_of_hearts,
...
我使用此代码在按钮点击和显示卡名称上生成随机卡。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView);
txt1 = (TextView) findViewById(R.id.mytext);
button = (Button) findViewById(R.id.btn1);
r = new Random();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//remove duplicates
do {
pickedImage = r.nextInt(images.length);
} while (pickedImage == lastPicked);
lastPicked = pickedImage;
//display random image
imageView.setImageResource(images[pickedImage]);
txt1.setText(images[pickedImage]);
}
});
}
答案 0 :(得分:1)
不是选择随机卡然后必须处理重复,更简单的方法可能是重新排列数组,然后从那里呈现图像:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView);
txt1 = (TextView) findViewById(R.id.mytext);
button = (Button) findViewById(R.id.btn1);
List<Integer> shuffledCards = new ArrayList<>(Arrays.asList(images));
Collections.shuffle(shuffledCards);
final Iterator<Integer> iter= shuffledCards.iterator();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Stop once all the cards have been displayed
if (!iter.hasNext()) {
return;
}
image = iter.next();
imageView.setImageResource(image);
txt1.setText(image);
}
});
}