Как вы говорите функции подождать несколько секунд в Kotlin? - PullRequest
0 голосов
/ 10 июня 2019

Котлин в Android Studio здесь.

Я пытаюсь заставить imageView исчезнуть на главном экране, подождать несколько секунд, а затем исчезнуть. На всю жизнь я не могу найти никаких документов о приостановке или ожидании. Это сводит меня с ума.

Как мне сказать моей функции просто остыть и подождать 3 секунды, а затем продолжить выполнение оставшейся части кода функции?

В идеале, я хотел бы, чтобы это было между:

imageView.startAnimation(animIn)
imageView.startAnimation(animOut)

Любая помощь очень ценится!

Зоопарк

Ответы [ 5 ]

2 голосов
/ 10 июня 2019

Вы можете использовать Handler,

Handler().postDelayed(Runnable { 
    //anything you want to start after 3s
}, 3000)
1 голос
/ 10 июня 2019

Так как это характерно для Kotlin, а не только для Android.Почему бы не использовать сопрограммы?

GlobalScope.launch {
    imageView.startAnimation(animIn)
    delay(3_000L)
    imageView.startAnimation(animOut)
}

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

0 голосов
/ 10 июня 2019

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

new Handler().postDelayed(new Runnable()
{
   @Override
   public void run()
   {
     imageView.startAnimation(animOut)
   }
}, 3000);
0 голосов
/ 10 июня 2019

вы можете использовать:

Timer("SettingUp", false).schedule(timeyouwant_in_milleseconds) { 
   imageView.startAnimation(animOut)
}
0 голосов
/ 10 июня 2019

импортируйте android.os.Handler и попробуйте следующее:

Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {
                // yourAnimationMethod();
            }
        }, 1000); // 1000 milliseconds

Если вы ищете однострочник, вы можете попробовать:

(new Handler()).postDelayed(this::yourAnimationMethod, 1000); // 1000 milliseconds
...