Попытка задержать в Java несколько раз - PullRequest
0 голосов
/ 15 февраля 2019

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

Пробные таймеры, запуск анимации перед tread.sleep и использование цикла while вместо A для.

private void playLaunchAnimation()
{

final Animation animation = AnimationUtils.loadAnimation(this, R.anim.fadein);

    for(int i=0; i < buttons.size();i++)
    {
        try {
            Thread.sleep(1000);
            buttons.get(i).startAnimation(animation);

        } catch (Exception e){
        /*
main declares that it throws InterruptedException. This is an exception that sleep throws when another thread interrupts the current thread while sleep is active. Since this application has not defined another thread to cause the interrupt, it doesn't bother to catch InterruptedException.

        */

        }

    }

}

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Привет, убедитесь, что этот код поможет вам

public static void main(String[] args) throws Exception {

        for(int i=0; i < 10;i++) {
            try {
                Thread.sleep(1000);
                System.out.println(i);
                if(i==9) {
                    i=0;
                }

            } catch (Exception e){
                System.out.println("error");
            }

        }

    }
0 голосов
/ 15 февраля 2019

(В ответе предполагается, что Android не совсем понятен в ОП.)

Это довольно ленивый способ сделать это, но, возможно, заставит вас задуматься.Было бы более интересно, чтобы обработчик вызывал следующий обработчик, чтобы был объявлен только один обработчик - но это было бы немного больше работы.

private void playLaunchAnimation() {

    final Animation animation = AnimationUtils.loadAnimation(this, R.anim.fadein);

    for(int i=0; i < buttons.size();i++)
    {
        // Create a handler on the UI thread to execute after a delay.
        // The delay is a function of loop index.
        // 
        // It may be necessary to declare buttons final - but your
        // OP did not list where it is defined.

        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
              buttons.get(i).startAnimation(animation);
            }
        }, ((i+1)*1000));

    }

}

Ссылки:

Каквызвать метод после задержки в Android

Основы Android: запуск кода в потоке пользовательского интерфейса

0 голосов
/ 15 февраля 2019

Похоже, вы звоните Thread.Sleep из потока пользовательского интерфейса.В конечном итоге это приведет к зависанию всего пользовательского интерфейса на время сна.То, что вы действительно хотите, это запустить сон из фонового потока.

Например:

AsyncTask.execute(new Runnable() {
   @Override
   public void run() {
      for(int i=0; i < buttons.size();i++)
      {
          try {
              Thread.sleep(1000);
              activity.runOnUiThread(new Runnable() {
                  buttons.get(i).startAnimation(animation);
              });
          } catch (Exception e){}
      }
});

Другой способ сделать это с помощью задержки после сообщения:

new android.os.Handler().postDelayed(
    new Runnable() {
        public void run() {
            buttons.get(i).startAnimation(animation);
            new android.os.Handler().postDelayed(this, 1000);
        }
    }, 
1000);
...