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

               });
            }
    }, 0, 1000); 

我创建了一个计时器,他的角色是计算应用程序的运行时间,只要计时器上升,我就想更改背景颜色。我的脚本有什么问题?

4

3 回答 3

0

问题是在 A.setBackgroundColor(); 中设置的颜色代码;

我对此有简单而合乎逻辑的解决方案: 1.make color array like this

int[] colors=new int[]{Color.BLACK,Color.BLUE,Color.GREEN,Color.RED,Color.YELLOW};
   int i=0;
  1. 当 i 在 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); 
    
于 2014-06-14T13:09:02.747 回答
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);
}
}

现在享受好运..

于 2014-06-14T13:58:28.440 回答
0

我认为问题出在您传递给该setBackgroundColor方法的值上。

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

组件存储如下 (alpha << 24) | (红色 << 16) | (绿色 << 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 秒)。您可以更改每秒添加的值以调整动画的持续时间。

于 2014-06-14T12:37:48.770 回答