繁体   English   中英

如何使用随机化,因此当您按下按钮时,它将带您进入随机屏幕

[英]How to use randomization, so when you press a button it brings you to a random screen

我在计算机科学实验室的时间里一直在寻找有关此问题的答案。 我们正在为此应用程序使用Android Studio。

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

这太不可思议了,我已经连续搜索了至少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类生成随机数。

Random rand = new Random();

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

然后显示该片段。

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

在这里似乎不需要使用多个活动(这会大大降低您的应用程序速度)。 如果要基于生成的随机数的结果显示不同的图像,则只需基于该随机数的结果为Image View显示.setImageResource()

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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