如何在Android中按下按钮时将背景设置为随机颜色?

4

我正在编写一个应用程序,每次按下按钮都会更改活动的背景颜色。这是我目前的代码。但它没有起作用!我做错了什么?

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button b = (Button) findViewById(R.id.button1);        
    final View a = findViewById(R.id.m);        
    final Random color = new Random();
    final Paint p = new Paint();


    b.setOnClickListener(new OnClickListener() {


        @Override
        public void onClick(View v) {

             p.setARGB(256,color.nextInt(256),color.nextInt(256),color.nextInt(256));                  
        a.setBackgroundColor((p.getColor()));

        }
    });
}

当我传递单一颜色时,它可以正常工作,例如 a.setBackgroundColor(Color.GREEN);


当您按下按钮时,它会执行什么操作? - FoamyGuy
@Tim 没有任何反应。屏幕仍然是白色的。 - Uday Kanth
1
你尝试过使用Color类吗?像这样:a.setBackgroundColor(Color.argb(256, color.nextInt(256), color.nextInt(256), color.nextInt(256))); - Cat
先为每种颜色创建3个不同的整数变量,并随机设置它们的值,然后将其输出到日志中,在尝试将它们设置为背景之前,这将有助于缩小问题范围。 - FoamyGuy
有一个打字错误:p.setARGB(256,应该是 p.setARGB(255 - Maxime
5个回答

4

可能已经有点晚了,但我也在找同样的东西,当我读到这个帖子时,我解决了这个问题。

你使用 256 作为 alpha 值和最大随机数值,但实际上应该使用 0-255 的数值范围。如果你改变这个值,它将正常工作。

Random color = new Random();
a.setBackgroundColor(Color.argb(255, color.nextInt(255), color.nextInt(255), color.nextInt(255)));

干杯


int color = 0xFF000000 | rnd.nextInt(0xFFFFFF); 颜色值为0xFF000000加上一个随机生成的0xFFFFFF。 - Umesh Chhabra

2

为了生成随机颜色,我写了一个方法(需要导入android.graphics.Color和java.util.Random):

int randomColor() {
    Random r = new Random();
    int red = r.nextInt(256);
    int green = r.nextInt(256);
    int blue = r.nextInt(256);
    return Color.rgb(red, green, blue);
}

然后我就像这样使用它:
Paint p = new Paint();
p.setColor(randomColor());

2

我不确定这个方法是否有效(但值得一试):

尝试在 onClick() 语句中初始化 color = new Random()。

b.setOnClickListener(new OnClickListener() {


    @Override
    public void onClick(View v) {
         color = new Random();
         p.setARGB(256,color.nextInt(256),color.nextInt(256),color.nextInt(256));                  
    a.setBackgroundColor((p.getColor()));

    }
});

另外,看看这个问题:

Android:在点击时生成随机颜色?

它似乎试图实现类似的目标。


1
我实际上通过随机化 alpha 值来解决了这个问题。但是我不知道为什么传递值 256 没有起作用!无论如何,感谢你的努力。 :) - Uday Kanth
啊,这很奇怪。如果我有帮到你的话,你可以接受或点赞 ;) - Kgrover
1
@UdayKanth - 你不能传递256,因为它接受的最高值是255。你有八个位来处理,这意味着你有256个数字可用,但它从0开始,并以255结束。 - Phill.Zitt
使用随机数生成颜色:int color = 0xFF000000 | mRandom.nextInt(0xFFFFFF); - Umesh Chhabra

0

看起来你走在了正确的路上。 别忘了获取你的种子,否则每次都会得到相同的“随机”值。

Random color = new Random(System.currentTimeMillis());

尝试将其包装在一个帖子中。

view.post(new Runnable() {
      @Override
      public void run() {
          // setbackground here
      }
}

-1
p.setARGB(200,color.nextInt(256),color.nextInt(256),color.nextInt(256));                  
a.setBackgroundColor((p.getColor()));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接