我有倒计时器,onFinished我想让屏幕反复改变颜色。
我正在尝试:
public void onFinish() {
findViewById(R.id.screenid).setTag("BLACK");
_timer2=new Timer();
_timer2.scheduleAtFixedRate(Flashscreen, 0,1700);}
TimerTask Flashscreen = new TimerTask()
{
public void run() {
if ( findViewById(R.id.screenid).getTag()=="BLACK" )
{
findViewById(R.id.screenid).setBackgroundColor(Color.BLUE);
findViewById(R.id.screenid).setTag("BLUE");
return;
}
if (findViewById(R.id.screenid).getTag()=="BLUE")
{
findViewById(R.id.screenid).setBackgroundColor(Color.BLACK);
findViewById(R.id.screenid).setTag("BLACK");
return;
}
}};
但它只会将颜色改为蓝色一次。发生什么事了?
答案 0 :(得分:2)
是检查对象是否相等而不是字符串内容相等?
尝试更改
( findViewById(R.id.screenid).getTag()=="BLACK" )
要
(((String)findViewById(R.id.screenid).getTag()).equals("BLACK"))
同样检查“BLUE”
基本上,'=='检查引用是否相同,就像它们都指向同一个对象一样。 'equals'实际上会检查字符串的内容是否相等。
答案 1 :(得分:1)
你可以尝试将两种颜色的变化都放在ui线程上运行。 像下面的东西
runOnUiThread(new Runnable() {
@Override
public void run() {
findViewById(R.id.imageView1).setBackgroundColor(Color.BLACK);
findViewById(R.id.imageView1).setTag("BLACK");
}
});