【问题标题】:Force Close!! Button to assign random color in RGB Values 0-255强制关闭!!在 RGB 值 0-255 中分配随机颜色的按钮
【发布时间】:2012-09-14 09:21:21
【问题描述】:

我的应用程序中的所有其他内容都有效,但是当我添加时

public void onClickRandomColor(View v) {
        Random rRed = null;
        Random rGreen = null;
        Random rBlue = null;
        int min = 0, max = 255;
        int randomRed = rRed.nextInt(max - min + 1) + min;
        int randomGreen = rGreen.nextInt(max - min + 1) + min;
        int randomBlue = rBlue.nextInt(max - min + 1) + min;
        Rset = randomRed;
        Gset = randomGreen;
        Bset = randomBlue;
    }

到 MainActivity.java 和 ONCLICK 行到 activity_main.xml

<Button
        android:id="@+id/btnRandom"
        android:layout_below="@+id/btnChoose"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:onClick="onClickRandomColor"
        android:text="@string/random"/>

她用力逼近我。还有很多其他控件,滑块使用 Rset、Gset 和 Bset 就好了。它必须与我获取随机整数的方法有关。

【问题讨论】:

  • 一旦你有一个非空的Random,你应该考虑压缩代码。像Rset = rnd.nextInt(256); 这样的东西就足够了,并且消除了一堆杂物(至少在视觉上是这样;无论如何,VM 很有可能会忽略您不必要的临时性。)

标签: java android button random integer


【解决方案1】:
  1. 您需要使用new Random() 创建随机对象,而不是分配空值。你不能在 null 上调用任何东西,你必须创建对象。
  2. 拥有三个不同的 Random 对象没有意义,您可以从单个对象中获得无限数量的随机数

您更正后的代码如下所示:

public void onClickRandomColor(View v) {
    Random rnd = new Random();
    int min = 0, max = 255;
    int randomRed = rnd.nextInt(max - min + 1) + min;
    int randomGreen = rnd.nextInt(max - min + 1) + min;
    int randomBlue = rnd.nextInt(max - min + 1) + min;
    Rset = randomRed;
    Gset = randomGreen;
    Bset = randomBlue;
}

【讨论】:

  • 第一个代码解决了我的问题,但这更整洁。我从两个正确答案中选择哪一个?我该如何选择?
【解决方案2】:

您正在创建初始化为空值的 Random。

将它们更改为Random rRed = new Random();

你基本上是在尝试做 null.nextInt() 这显然是行不通的。

希望这会有所帮助!

干杯!

【讨论】:

  • 好的,固定的强制关闭,为什么它不更新滑块?我不要求弹出 ColorDialog 更新滑块,它只是这样做?
  • 随机颜色是否会导致颜色选择器中心显示的颜色发生变化?
  • 如果没有更多代码,我无法判断您是如何使用 RSet、GSet 或 BSet。但是您可能需要添加一个功能,将您的滑块更新到此 onclick 的末尾。
  • 你可以通过多种方式做到这一点:创建一个具有RSet,GSet和Bset输入参数的函数,然后直接更改滑块,使用Broadcastreceiver发送广播;有一个定期检查更改等的计时器......
猜你喜欢
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
相关资源
最近更新 更多