如何使用随机化,所以当你按下一个按钮时,它会把你带到一个随机屏幕



我在计算机科学实验室里的时间一直在寻找这个问题的答案。 我们正在为这个应用程序使用安卓工作室。

我想做的是使用随机化,使一组屏幕在你点击一个按钮时被随机化。 我的二人组正在开发一个掷骰子的应用程序,我们的想法是为骰子的每一面制作六个不同的屏幕。 基本上,当我们单击"掷骰子"按钮时,它会思考一秒钟,然后将您带到一个随机页面,其中包含您得到的骰子上的数字图片。

这非常奇怪,我已经连续搜索了至少 3 个小时来寻找这个问题的解决方案,但无济于事。 如果有人需要有关该问题的更多信息(因为我不知道如何正确表达它(,那么请问我。

只需使用 Random.nextInt(( 获取一个最多 6 的随机数,并使用它为每个骰子侧选择一个 6 图像。您不需要创建 6 个不同的屏幕,您只需要 6 个不同的图像,其中数字指示要使用的图像。例如:

// A list of drawables you've defined in /res/drawable folder for each die side
final int[] images = new int[6] {
R.drawable.die_side_1,
R.drawable.die_side_2,
R.drawable.die_side_3,
R.drawable.die_side_4,
R.drawable.die_side_5,
R.drawable.die_side_6
};
int random = Random.nextInt(6);       // Get random value, 0-5
int dieSideDrawable = images[random]; // Pick image to show based on random value
mDieImageView.setImageResource(dieSideDrawable); // Show image on an image view

希望对您有所帮助!

执行所需操作的最简单方法是将活动放在数组中,然后使用Random类的nextInt方法从数组中选择适当的活动。

话虽如此,您很可能希望创建一个包含两个图像的活动,而不是选择要显示的活动或片段,而是选择要加载到活动中的图像。

我建议使用片段来实现这一点。

创建片段列表

ArrayList<Fragment> fragmentList = new ArrayList<>();

现在使用 java 随机类生成随机数。

Random rand = new Random();
int  n = rand.nextInt(fragmentList.size());

然后就展示那个片段。

getSupportFragmentManager()
.beginTransaction()
.replace(containerViewId, fragmentList.get(n))
.addToBackStack(null)
.commit();

在这里使用多个活动似乎是不必要的(并且会显着降低您的应用程序速度(。如果要根据生成的随机数的结果显示不同的图像,则只需根据该随机数的结果为图像视图显示.setImageResource((。

在下面的示例中,我将随机数生成(generateRandomInt(( 方法,该方法将随机整数存储在thisRoll变量中(分开,并且仅在changeImageView((方法运行时调用它。

public void changeImageView(View view){
generateRandomInt();
if (thisRoll == 1) {
mainImage.setImageResource(R.drawable.s1);
} else if (thisRoll == 2) {
mainImage.setImageResource(R.drawable.s2);
} else if (thisRoll == 3) {
mainImage.setImageResource(R.drawable.s3);
} else if (thisRoll == 4) {
mainImage.setImageResource(R.drawable.s4);
} else if (thisRoll == 5) {
mainImage.setImageResource(R.drawable.s5);
} else {
mainImage.setImageResource(R.drawable.s6);
}
Toast.makeText(DiceRollActivity.this, thisRoll + " ...But The House Always Wins!", Toast.LENGTH_SHORT).show();
}

最新更新