我有将近20 TextView
,我需要做一些事情来动态改变背景颜色。
例如:所有TextView
具有相同的默认背景颜色,然后在5秒后,第一个将变为红色,而其他人仍然相同,然后在经过5秒后,第一个TextView
的背景颜色将变为默认值第二个TextView
的背景颜色将变成红色,它会像这样继续。
我试图将它们放在线程和处理程序中的for循环中,但它们一起改变了。我该怎么办?
我试过这段代码
Thread color=new Thread() {
public void run() {
for(int i=2131230724;i<=2131230742;i++){
TextView currentText = (TextView) findViewById(i);
currentText.setBackgroundColor(Color.RED);
try {
sleep(2000);
currentText.setBackgroundColor(Color.TRANSPARENT);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
然后我用
mHandler.post(color);
如果其他人也需要,我找到了解决问题和分享的解决方案。
Runnable myhandler=new Runnable() {
int id=2131230724;//First textView id
@Override
public void run() {
// TODO Auto-generated method stub
if(id==2131230724){
TextView currentText=(TextView)findViewById(R.id.egzersiz01_kelime1);
currentText.setBackgroundColor(Color.RED);
id++;
}
else if(id==2131230725){
TextView currentText=(TextView)findViewById(R.id.egzersiz01_kelime2);
currentText.setBackgroundColor(Color.RED);
TextView PreText=(TextView)findViewById(R.id.egzersiz01_kelime1);
PreText.setBackgroundColor(Color.TRANSPARENT);
id++;
}//And all other id's to else if as same as mine.
mHandler.postDelayed(myhandler, delay);
和onCreate()
myhandler.run();
我曾尝试使用for循环使其变得简单,但它崩溃了,我不得不把它们全部写出来。 谢谢你的帮助...
答案 0 :(得分:0)
你可以像这样将params放到AsyncTask中,然后
new changeColor().execute(max);
private class changeColor extends AsyncTask<Integer,Integer,Void>{
int max,cur;
@Override
protected void onPreExecute() {
max=cur=0;
super.onPreExecute();
}
@Override
protected Void doInBackground(Integer... number) {
int max=number[0];
int cur=1;
if(max>0)
while(true ){/*or other condition else*/
try {
Thread.sleep(5000);//Sleep 5000s before make change
} catch (InterruptedException e) {
Log.i("TAG","InterruptedException");
}
publishProgress(cur);
if(cur==max)
cur=1;
else
cur++;
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
changeColorTextView(values[0]);
super.onProgressUpdate(values);
}
private void changeColorTextView(int textViewId){
switch(textViewId){
case textId1:{
//do some thing here like:
//textView2.setBackGroundColor(R.color.RED);
//textView1.setBackGroundColor(default);
break;
}
//....
}
}
}