2016-07-04 15 views
0

私はAndroidが初めてです。私のプログラムは、信号の動作をシミュレートし、経過秒数に応じて適切な色を表示します。 buttonRandomを0から6秒までクリックすると緑色の背景が表示され、6から7秒間で黄色の背景が表示され、7から9秒間は赤色の背景が表示されます。サイクルは自動的に実行されません

public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.buttonRed: 
      mTextView.setText(R.string.buttonRed); 
      mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorRed)); 
      break; 
     case R.id.buttonYellow: 
      mTextView.setText(R.string.buttonYellow); 
      mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorYellow)); 
      break; 
     case R.id.buttonRandom: 
      int count = 0; 
      while (count <= 10) { 
       Date date = new Date(); 
       int sec = date.getSeconds(); 
       if (sec % 10 >= 0 && sec % 10 < 6) { 
        mTextView.setText(R.string.buttonGreen); 
        mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorGreen)); 
        count++; 
       } 
       else if (sec % 10 >= 6 && sec % 10 < 7) { 
        mTextView.setText(R.string.buttonYellow); 
        mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorYellow)); 
        count++; 
       } 
       else if (sec % 10 >= 7 && sec % 10 < 9) { 
        mTextView.setText(R.string.buttonRed); 
        mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorRed)); 
        count++; 
       } 
      } 
    } 

しかし、このコードは、独自の背景を変更しない、それはボタンを押すたびに必要です。一度押すと背景が自動的に変わることを確認するには?

答えて

1

ただし、このコードでは背景を変更することはありません。ボタンを押すたびに背景が変更されます。

これは、あなたのwhileループが非常に速く実行されているからです。これは、すでに10秒後に実行されています。あなたがチェックを行うためにここにハンドラか何かを使用したい毎秒

int sec = 0; 
case R.id.buttonRandom: 
    final Handler h = new Handler(); 
    h.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      if (sec % 10 >= 0 && sec % 10 < 6) { 
       mTextView.setText(R.string.buttonGreen); 
       mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorGreen)); 
      } else if (sec % 10 >= 6 && sec % 10 < 7) { 
       mTextView.setText(R.string.buttonYellow); 
       mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorYellow)); 
      } else if (sec % 10 >= 7 && sec % 10 < 9) { 
       mTextView.setText(R.string.buttonRed); 
       mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorRed)); 
      } 

      sec++; 
      if (sec < 11) { 
       h.postDelayed(this); 
      } 
     } 
    }, 1000); 
0

何がしたことは一度ボタンをクリックするだけで、アクションで、それは時間の変化に耳を傾けることはありません。

Hereタイマーの使用に関するチュートリアルがあります。それを通ってタイマーで作業する方法を教えます。その後、必要に応じて調整します(テキストの代わりに色を変えるなど)。

0
private long timeInMilliseconds = 0L; 
private long updatedTime = 0L; 
private long startTime = 0L; 
//thread for 5 sec 
private Runnable updateTimerThread = new Runnable() { 
    public void run() { 

     timeInMilliseconds = SystemClock.uptimeMillis() - startTime; 

     updatedTime = timeInMilliseconds; 

     int secs = (int) (updatedTime/1000); 
     secs = secs % 60; 

     if (secs % 10 >= 0 && secs % 10 < 6) { 
      mTextView.setText(R.string.buttonGreen); 
      mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorGreen)); 
      count++; 
     } else if (sec % 10 >= 6 && sec % 10 < 7) { 

      mTextView.setText(R.string.buttonYellow); 
      mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorYellow)); 
      count++; 

     } 


    else if(sec%10>=7&&sec%10<9) 

    { 
     mTextView.setText(R.string.buttonRed); 
     mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorRed)); 
     count++; 
    } 
} 
}; 

ボタンclcik

でこれを試します
関連する問題