Перейти к содержанию
  • Регистрация
  • 0
brunnengi

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

Вопрос

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

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

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


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

Рекомендуемые сообщения

  • 0

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

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

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


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

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

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


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

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

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


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

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

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

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

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

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


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

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

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


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

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

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


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

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

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

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


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

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

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


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

Почему?

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

while Flag do
  Application.ProcessMessage;

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

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

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

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

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


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

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

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


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

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

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

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

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


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

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

×
×
  • Создать...