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

4

5 回答 5

4

可能为时已晚,但我一直在寻找同样的东西,当我阅读这个帖子时,我想出了问题的解决方案。

您将 256 用于 alpha,并将 256 用于最大随机数。但要使用的值是 0-255。如果你改变它会运作良好。

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

干杯

于 2013-02-25T13:58:01.543 回答
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:点击时生成随机颜色?

似乎它正在尝试实现类似的目标。

于 2012-07-19T19:25:29.320 回答
2

对于随机颜色我写了一个方法(你需要 import android.graphics.Color; import 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());
于 2014-02-28T06:04:39.207 回答
0

看起来您走在正确的道路上。不要忘记获取种子,否则您每次都会获得相同的“随机”值。

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

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

view.post(new Runnable() {
      @Override
      public void run() {
          // setbackground here
      }
}
于 2012-07-19T18:41:17.507 回答
-1
p.setARGB(200,color.nextInt(256),color.nextInt(256),color.nextInt(256));                  
a.setBackgroundColor((p.getColor()));
于 2013-03-02T08:41:49.147 回答