入力したテキストメッセージに合わせて画像の背景色を変えたい。さらに、別の入力メッセージを提供するために背景色が変更される前に、背景色を一定時間維持できるようにしたいです。
たとえば、入力メッセージが「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が正しいことに注意してください)事前にThx〜