逐渐将背景颜色逐渐更改为所有颜色

时间:2014-12-27 07:01:10

标签: java android android-layout development-environment

我一直试图找到一种方法将我的相对布局的背景颜色逐渐改为所有颜色,例如(柔和的蓝色,蓝色,深蓝色,紫色等等)我现在只拥有的代码逐渐将颜色从黑色变为白色。我将感谢您提供的任何帮助或建议。

这是我现在拥有的代码。

 layOut = (RelativeLayout)findViewById(R.id.relativeLayout2);



new Thread() {
   int color = 0;
      public void run() {
            for (color = 0; color < 255; color++) {
                try {
                    sleep(20);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            layOut.setBackgroundColor(Color.argb(255,
                                    color, color, color));
                        }
                    });
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }.start();'`enter code here

4 个答案:

答案 0 :(得分:1)

使用color属性尝试objectanimator,查看此链接,它对您更有用。

color animation using object animator

答案 1 :(得分:0)

如果我理解了您的问题,请更改redgreenblue颜色值。像,

public void run() {
    for (int red = 0; red < 256; red += 8) {
        for (int green = 0; green < 256; green += 8) {
            for (int blue = 0; blue < 256; blue += 8) {
                try {
                    sleep(20);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            layOut.setBackgroundColor(Color.argb(255,
                                red, green, blue));
                        }
                    });
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

当您将三个通道设置为相同的值时,您将获得黑色(0),灰色的所有阴影,然后是白色(255)(这是颜色的工作方式)。

答案 2 :(得分:0)

我认为实施这些事情很有趣。您只是更改rgb值,因此您没有一个,而是三个颜色变量。例如:

float fromRed = 0;
float fromGreen = 0;
float fromBlue = 0;

float toRed = 0;
float toGreen= 100;
float toBlue = 255;

float stepRed = (toRed - fromRead) / 30f;
float stepGreen= (toGreen - fromGreen) / 30f;
float stepBlue = (toBlue- fromBlue) / 30f;

for(float i = 0; i < 30; i++) {
    try {
        sleep(20);
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                layOut.setBackgroundColor(Color.argb(255,
                    fromRed + stepRed*i, fromGreen + stepGreen*i, fromBlue + stepBlue*i));
            }
         });
     } catch (InterruptedException e) {}
}

所以你单独计算颜色并应用它们(在这种情况下分为30步)。希望它工作,没有测试它,因为模拟器需要很长时间才能加载:(

答案 3 :(得分:0)

您正在同时更改RGB三个颜色,使颜色从黑色变为白色。这是我测试过的代码。

我已经使用HSV来做到这一点。(在RGB中你需要维护所有三个变量,就像你必须添加3个循环一样)。这是代码。

rl = (RelativeLayout) findViewById(R.id.myRelativeLayout);


    new Thread() {
          int hue = 0 ; 
          int saturation = 240; //adjust as per your need
          int value = 120; //adjust as per your need

          public void run() {
                    for ( hue = 0; hue < 255; hue++) {
                        try {
                            sleep(20);
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    //Now form a hsv float array from the 3 variables
                                    float[] hsv = {hue , saturation , value};

                                    //make color from that float array
                                    int cl = Color.HSVToColor(hsv);

                                    rl.setBackgroundColor(cl);
                                }
                            });
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }.start();

希望它会对你有所帮助,随时再询问。