Pepper отменить запущенную анимацию - PullRequest
0 голосов
/ 17 сентября 2018

В настоящее время я работаю над роботом Pepper (разработчик Android), и я пытаюсь использовать некоторые "базовые" анимации (из библиотеки QiSQK). Например, при вызове WS я запускаю анимацию «think» с использованием animation / animate. Затем, когда заканчивается вызов WS, я пытаюсь использовать другую анимацию («показ планшета»).

Я видел, что Пеппер не может анимировать дважды, если предыдущая анимация не закончена / не отменена. Итак, я использовал requestCancellation(), но это не остановило анимацию. Я также использовал cancel(mayInterruptIfRunning), тоже не остановился.

Итак, я не могу связать 2 анимации, не дожидаясь остановки предыдущей анимации (мой вызов WS = максимум 3-4 с).

Есть идеи?

Пример:

private var animate: Future<Animate>? = null

fun animate(animRes: Int) {
        animate?.requestCancellation()

        AnimationBuilder
                .with(qiContext)
                .withResources(animRes)
                .buildAsync()
                .thenConsume { futureAnimation ->
                    animate = AnimateBuilder
                            .with(qiContext)
                            .withAnimation(futureAnimation?.value)
                            .buildAsync()
                    animate?.andThenConsume {
                       it.async().run()
                    }
                }
}

Thx, Бастьен.

1 Ответ

0 голосов
/ 17 сентября 2018

Наконец-то выяснил мою проблему.На самом деле, я хранил ссылку animate при создании объекта следующим образом:

animate = AnimateBuilder
                  .with(qiContext)
                  .withAnimation(futureAnimation?.value)
                  .buildAsync()

Итак, я напечатал свои объекты (как и все Future, используемые в моих обратных вызовах), затем я обнаружил, чтопосле использования it.async().run() из моего анимированного обратного вызова andThenConsume, который возвращает ссылку на текущую анимацию, отличается от той, которую я создал ранее (думал повторно использовать ту же старую ссылку).

Итак, здесь мой новый(рабочий) код:

fun animate(animRes: Int) {
        //Cancelling possible running animation to display a new one
        animate?.requestCancellation()

        AnimationBuilder
                .with(qiContext)
                .withResources(animRes)
                .buildAsync()
                .thenConsume { futureAnimation ->
                    AnimateBuilder
                            .with(qiContext)
                            .withAnimation(futureAnimation?.value)
                            .buildAsync()
                            .andThenConsume {
                                animate = it.async().run() as Future<Animate>
                            }
                }
}
...