我想根据输入的文本消息更改图像的背景颜色。此外,我希望背景颜色可以保持一段时间,然后再更改以提供另一个输入消息。
例如,假设输入消息为“a”,我先将其转为“101010”。然后我希望我的程序可以将图像显示为“白色黑色白色黑色白色黑色”,其中白色代表 1,黑色代表 0,并且每种颜色可以停留一段时间(我可以决定)。
以下是我的代码。
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public Runnable ChangeColor2White(ImageView im){
//Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.black_im);
//im.setImageBitmap(bmp);
im.setBackgroundResource(R.drawable.white);
return null;
}
public Runnable ChangeColor2black(ImageView im){
//Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.white_im);
//im.setImageBitmap(bmp);
im.setBackgroundResource(R.drawable.black);
return null;
}
public void cvOnClick(View myView){
EditText Input = (EditText) findViewById(R.id.myText1);
String data = Input.getText().toString();
char dataArray[] = data.toCharArray();
Vector<Integer> v = new Vector<Integer>();
TextView Output = (TextView) findViewById(R.id.myText2);
ImageView im = (ImageView) findViewById(R.id.myImage1);
Handler handler = new Handler();
for(int i=0;i<data.length();i++){
int temp = (int)dataArray[i];int par1,par2,par3,par4,par5,par6 = 0;
if(temp!=97){
if(temp>=48 && temp<=57) //0~10 (0~9)
temp-=48;
else if(temp>=65 && temp<=90) //A~Z (10~35)
temp-=55;
else if(temp>=98 && temp<=122) //a~z (36~61)
temp-=61;
else
temp =62;
par1 = temp/32;
if(par1>0){
par1 = 1;temp-=32;}
par2 = temp/16;
if(par2>0){
par2 = 1;temp-=16;}
par3 = temp/8;
if(par3>0){
par3 = 1;temp-=8;}
par4 = temp/4;
if(par4>0){
par4 = 1;temp-=4;}
par5 = temp/2;
if(par5>0){
par5 = 1;temp-=2;}
par6 = temp/1;
if(par6>0){
par6 = 1;temp-=1;}
v.addElement(par1);
v.addElement(par2);
v.addElement(par3);
v.addElement(par4);
v.addElement(par5);
v.addElement(par6);
}
else if(temp==97){
v.addElement(1);
v.addElement(1);
v.addElement(1);
v.addElement(1);
v.addElement(1);
v.addElement(1);
}
}
Output.setText(v.toString());
for(int i=0;i<v.size();i++){
if(v.elementAt(i)==0){
//handler.removeCallbacks(ChangeColor2black(im));
//handler.postDelayed(ChangeColor2black(im), 1000);
ChangeColor2black(im);
}
else if(v.elementAt(i)==1){
//handler.removeCallbacks(ChangeColor2White(im));
//handler.postDelayed(ChangeColor2White(im), 1000);
ChangeColor2White(im);
}
try{
Thread.sleep(1000);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
我的问题是程序只向我显示最后一位的结果,这意味着背景保持默认直到程序结束,它向我显示最后一位输入的结果。我还尝试了处理程序而不是 Thread.sleep()。但这又是同一个故事。让我给你看代码
public void cvOnClick(View myView){
EditText Input = (EditText) findViewById(R.id.myText1);
String data = Input.getText().toString();
char dataArray[] = data.toCharArray();
Vector<Integer> v = new Vector<Integer>();
TextView Output = (TextView) findViewById(R.id.myText2);
final ImageView im = (ImageView) findViewById(R.id.myImage1);
Handler handler = new Handler();
for(int i=0;i<data.length();i++){
int temp = (int)dataArray[i];int par1,par2,par3,par4,par5,par6 = 0;
if(temp!=97){
if(temp>=48 && temp<=57) //0~10 (0~9)
temp-=48;
else if(temp>=65 && temp<=90) //A~Z (10~35)
temp-=55;
else if(temp>=98 && temp<=122) //a~z (36~61)
temp-=61;
else
temp =62;
par1 = temp/32;
if(par1>0){
par1 = 1;temp-=32;}
par2 = temp/16;
if(par2>0){
par2 = 1;temp-=16;}
par3 = temp/8;
if(par3>0){
par3 = 1;temp-=8;}
par4 = temp/4;
if(par4>0){
par4 = 1;temp-=4;}
par5 = temp/2;
if(par5>0){
par5 = 1;temp-=2;}
par6 = temp/1;
if(par6>0){
par6 = 1;temp-=1;}
v.addElement(par1);
v.addElement(par2);
v.addElement(par3);
v.addElement(par4);
v.addElement(par5);
v.addElement(par6);
}
else if(temp==97){
v.addElement(1);
v.addElement(1);
v.addElement(1);
v.addElement(1);
v.addElement(1);
v.addElement(1);
}
}
Output.setText(v.toString());
for(int i=0;i<v.size();i++){
if(v.elementAt(i)==0){
handler.removeCallbacks(ChangeColor2black(im));
handler.postDelayed(new Runnable() {
public void run() {
ChangeColor2black(im);
}
},1000);
}
else if(v.elementAt(i)==1){
handler.removeCallbacks(ChangeColor2White(im));
handler.postDelayed(new Runnable() {
public void run() {
ChangeColor2White(im);
}
},1000);
}
}
}
}
以及我的Android虚拟机的结果:http: //i.imgur.com/QKWj6.png
(注意这张图是程序的结果,所以最后一位0是正确的,用黑色背景表示)谢谢提前~