0

我想根据输入的文本消息更改图像的背景颜色。此外,我希望背景颜色可以保持一段时间,然后再更改以提供另一个输入消息。

例如,假设输入消息为“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是正确的,用黑色背景表示)谢谢提前~

4

0 回答 0