2015-09-27 2 views
0

Как можно сделать приложение, которое автоматически изменяется автоматически после определенного времени. Мой код не работает по каким-либо причинамИзменить цвет после определенного времени

Random r = new Random(); 
    Timer t = new Timer(); 
    LinearLayout ll = (LinearLayout) findViewById(R.id.ll); 

    long m = System.nanoTime(); 
    int seconds = (int) (m/1000); 

    if(seconds <= 5){ 
     ll.setBackgroundColor(Color.BLACK); 
    }else{ 
     ll.setBackgroundColor(Color.WHITE); 
    } 

Для примера. экран черный и после определенного времени белый. И что время уменьшает его, изменение происходит быстрее.

+0

какой цвет он показывает? –

+0

White все время –

+0

вам нужно поставить 'if condition' в' onTick() 'метод таймера, лучше использовать' CountdownTimer' см. Здесь http://stackoverflow.com/questions/7483909/android-timer-ontick- проблема –

ответ

1

Вы пытаетесь преобразовать наносекунды в секунды, но на самом деле вы делаете не то же самое!

попробовать

int seconds = (int) (m/1000000000); 

преобразовать в nan0-секунды до нескольких секунд

EDIT:

, если вы просто хотите сохранить изменения цвета, используйте этот код:

public static int color = 1; 
android.os.Handler customHandler = new android.os.Handler(); 
       customHandler.postDelayed(updateTimerThread, 0); 

и его определение:

private Runnable updateTimerThread = new Runnable() 
{ 
     public void run() 
     { 
      //write here whaterver you want to repeat 
      if(color == 1){ 
      ll.setBackgroundColor(Color.BLACK); 
      color = 2; 
      }else{ 
       ll.setBackgroundColor(Color.WHITE); 
       color = 1; 
      } 

      customHandler.postDelayed(this, 5000);// will repeat after 5 seconds 
     } 
}; 
+0

Все те же. –

+0

отредактирован .. попробуйте. Вам больше не нужна никакая итерация цикла! –

0

Try после кода

Calendar c = Calendar.getInstance(); 
int seconds = c.get(Calendar.SECOND); 
//Adding Log Statement to check 

Log.i(Tag, String.valueOf(seconds); 
if(seconds % 10 < 5){ 
     ll.setBackgroundColor(Color.BLACK); 
    }else{ 
     ll.setBackgroundColor(Color.WHITE); 
    } 
+0

Теперь экран только черный. –

+0

Попробуйте войти, чтобы увидеть значения секунд, чтобы лучше понять – MDMalik

1

Вы можете использовать протектор для управления, попробуйте это. нить будет лучшим способом для достижения этой цели, поскольку вы хотите постоянно менять цвет на регулярном интервале.

Handler handler ; 
LinearLayout ll ; 
int i = 0; 
int colors[] = {Color.BLACK, Color.WHITE, Color.BLUE, Color.GREEN, Color.GRAY}; 
Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     ll.setBackgroundColor(colors[i]); 
     i++; 
    } 
}; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ...... 
    ....... 
    handler = new Handler(); 
    ll = (LinearLayout) findViewById(R.id.ll); 

    Thread myTread = new Thread(){ 
     public void run() { 
      try { 
       while(true){ 
        sleep(3000); 
        handler.post(runnable); 

       } 

      } 
      catch (InterruptedException e) {} 
     } 

    }; 
    myTread.start(); 
} 

код изменит цвет фона каждые 3secs sleep(3000), как написано в коде. также каждый раз, когда он меняет его, выбирается из набора предварительно заданных цветовых массивов.

Вы также можете использовать случайное генерирование цветов. либо вы произвольно генерируете значения rgb, либо можете хранить цвета в массиве, как я сделал, и случайным образом перебирать его.

3

Пожалуйста, попробуйте ввести следующий код для изменения цвета. Используйте таймер обратного отсчета для изменения цвета с условием.

new CountDownTimer(5000,1000) 
{ 
    onFinish() 
    { 

      if(flag==1) 
      { 
        //color set black 
        flag=0; 
        //start the countdown timer again. 
      } 
      else 
      { 
        //color set white 
        flag=1; 
        //start the countdown timer again. 
      } 
    } 
} 
Смежные вопросы