通过计时器更改背景颜色

时间:2014-06-14 12:19:52

标签: android timer setbackground

public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    tvTimer.setText("timer=" + String.valueOf(TimeCounter));
                    TimeCounter++;
                    A.setBackgroundColor(123455+TimeCounter*100000);
                }

               });
            }
    }, 0, 1000); 

我创建了一个计时器,他的角色是计算应用程序的运行时间,我想在计时器启动时更改背景颜色。我的剧本出了什么问题?

3 个答案:

答案 0 :(得分:0)

我认为问题来自您传递给setBackgroundColor方法的价值。

从课程Color的文档中我们可以看到:

  

组件存储如下(α<24)| (红色&lt;&lt; 16)|   (绿色&lt;&lt; 8)|蓝色。

在您的代码中,您传递的第一个值(假设TimeCounter从0开始)是123455,它对应于十六进制的0x0001E23F

通过分解它,我们有:

alpha=0x00
red=0x01
green=0xE2
blue=0x3F

它为您提供0%的alpha值,这意味着颜色透明

您每秒都会向此值添加100000。因此,大约需要166秒(差不多3分钟)才能获得alpha值大于0的颜色(但由于alpha的百分比低于1%,它仍然会隐身。)

要修复它,您可以使用每种颜色的偏移量将alpha值设置为100%。为此,您只需将0xff000000 (4 278 190 080)添加到颜色值。

最后,请确保颜色值始终低于最大值0xffffffff (4 294 967 295),并且它应该有效。

以下是示例代码:

private int offsetColor = 0xFF000000; //offset to have 100% in alpha value
public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    tvTimer.setText("timer=" + String.valueOf(TimeCounter));
                    TimeCounter++;
                    if (TimeCounter < 167) {
                        A.setBackgroundColor(offsetColor+TimeCounter*100000);
                    } else {
                        /* You just reach the limit: 0xFFFFFFFF which is White */
                    }
                }
           });
        }
}, 0, 1000);

使用此示例,您可以执行166次迭代(166秒)。您可以更改每秒添加的值以调整动画的持续时间。

答案 1 :(得分:0)

问题是 A.setBackgroundColor();

中设置的颜色代码

我有这个简单而合理的解决方案: 1.像这样制作颜色数组

int[] colors=new int[]{Color.BLACK,Color.BLUE,Color.GREEN,Color.RED,Color.YELLOW};
   int i=0;
  1. 通过其索引设置数组的颜色,因为我在Runnable:

    中递增
       public void run() {
    
            runOnUiThread(new Runnable() {
    
                public void run() {
    
                    tvTimer.setText("timer=" + String.valueOf(TimeCounter));
    
                    TimeCounter++;
    
                    A.setBackgroundColor(colors[i]);
    
                    i++;
                    if(i==5){
                    i=0;
                    }
                }
    
               });
            }
    }, 0, 1000); 
    

答案 2 :(得分:0)

请参阅我已按要求为您的颜色更改创建新应用程序。:

public class MainActivity extends Activity {

ImageView iv;

int red = 255, green = 0, blue = 0;
int i = 0;
int a = 30;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    iv = (ImageView) findViewById(R.id.imageView1);
    // m.postScale(2f, 2f);
    Timer t = new Timer();
    t.scheduleAtFixedRate(new TimerTask() {

        public void run() {

            runOnUiThread(new Runnable() {

                public void run() {

                    iv.setBackgroundColor(Color.argb(a, red, green, blue));
                    Log.d("main", "i: " + i + " a:+ " + a + " red: " + red
                            + " green: " + green + " Blue: " + blue);
                    a = a + 30;
                    // set 30 to 60 for more difference
                    if (a > 250) {
                        a = 30;
                        i++;
                        if (i == 1) {
                            red = 0;
                            green = 255;
                            blue = 0;
                        } else if (i == 2) {
                            red = 0;
                            green = 0;
                            blue = 255;

                        } else if (i == 3) {
                            red = 255;
                            green = 0;
                            blue = 0;

                        }

                        if (i == 3) {
                            i = 1;
                        }

                    }

                }

            });
        }
    }, 0, 1000);
}
}

现在享受好运..