public void run() {
runOnUiThread(new Runnable() {
public void run() {
tvTimer.setText("timer=" + String.valueOf(TimeCounter));
TimeCounter++;
A.setBackgroundColor(123455+TimeCounter*100000);
}
});
}
}, 0, 1000);
我创建了一个计时器,他的角色是计算应用程序的运行时间,我想在计时器启动时更改背景颜色。我的剧本出了什么问题?
答案 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;
通过其索引设置数组的颜色,因为我在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);
}
}
现在享受好运..