• 0
brunnengi

[Android] TAnimator.AnimateFloatWait как работает

Вопросы

Здравствуйте.

TAnimator.AnimateFloatWait работает не корректно или я его не так использую?
Вроде он должен производить анимацию и после её окончания продолжить код что идёт следом.
В этом то и отличии от обычной анимации без Wait, которая выполняется сама и основной код не ждет её завершения.
Раньше всё было хорошо. Но сейчас AnimateFloatWait просто замирает, проходит время отведенное на анимацию (самой анимации нет) и потом сразу уже готовый результат.
Т.е. если мы захотим с помощью AnimateFloatWait передвинуть кнопку на 50px за 3  сек., то после запуска, ничего не будет происходить 3 секунды, а потом кнопка резко окажется там где она должна быть согласно анимации. Только вот анимации нет.
Кто уже натыкался на это и как с этим бороться?
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 ответов на этот вопрос

  • 0

Версия, платформа?

В Токио под Андроид действительно была похожая проблема, мы ее так и не решили.
Под Виндовс и иОС все работало правильно.
Смутно помню, что были сторонние исходники, решающие эту проблему. 
Kastri Free если не ошибаюсь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Я тоже натыкался на Kastri Free, но так и не понял как они решили проблему и что нужно использовать из их арсенала ((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Нашел что они пишут как поменять, но под Rio всё также. Не меняется ничего((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Думаю проблема в том, что банально не хватает производительности аппарата, поэтому и идет пропуск тиков

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Обычная анимация то работает.

Да и в старых версиях нормально всё было.

Не думаю что проблема в мощности аппарата или её не хватки.

Изменено пользователем brunnengi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Такая же проблема (Rio). Переделал всё на просто AnimateFloat с разными костылями(((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Костыль что бы дожидаться окончания анимации? Если да, то что за костыль, поделись пожалуйста

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

думаю, речь идет о том, что в конце анимации, она дергает событие - "я всё". "заморозку" программы до наступления этого события нужно сделать самостоятельно

я правильно понял?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Да всё проще, не стал заморачиваться, сделал поток с wait на количество секунд в анимации. Т.е. в потоке wait не вешает форму и всё, но это п...ц а не костыль(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Почему?

Андроид не поддерживает конструкции типа:

while Flag do
  Application.ProcessMessage;

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

Любая анимация вида AnimateXXXAndWait внутри себя использует этот шаблон. Поэтому банально анимация выполняется, но отрисовки не будет. Так как сообщение на отрисовку будет обработано уже в главной петле обработки сообщения после возврата управления (выхода из этого паттерна). 

На что заменить?

Не использовать синхронную анимацию в принципе! Заменить синхронный на асинхронный вариант с коллбеком завершения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

А где нибудь есть пример как это сделать - вызывать асинхронную анимацию с коллбеком?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
8 часов назад, Brovin Yaroslav сказал:

На что заменить?

Не использовать синхронную анимацию в принципе! Заменить синхронный на асинхронный вариант с коллбеком завершения.

Если можно пример, как это грамотно сделать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу