2012-06-01 4 views
11

В течение последних нескольких месяцев я построил движок tweening с открытым исходным кодом на Java (Universal Tween Engine), чтобы иметь возможность легко добавлять плавные анимации и переходы в игры для Android. Он работает как бриз для игр и успешно используется многими людьми (в основном в сообществе LibGDX). Библиотека является общей и может использоваться для анимации всего (компоненты Swing UI, объекты игры opengl и т. Д.). Теперь я хочу создать аддон в lib, посвященный пользовательским интерфейсам Android, поскольку я считаю, что это может значительно облегчить создание очень сложных анимаций по сравнению со встроенной анимационной каркасной платформой.Как анимация Android работает под капотом?

My lib предоставляет метод .update(float deltaTime), который должен вызываться каждый раз, когда вы хотите обновить все запущенные анимации. Он был разработан для игр, поскольку каждая игра предоставляет бесконечный цикл, но это не относится к пользовательским интерфейсам.

Поэтому мне было интересно, как работает анимационная среда Android API под капотом. Есть ли статический поток, посвященный анимации, который работает непрерывно и обновляет анимацию за кадром и приостанавливается до тех пор, пока не будет запущена новая анимация?

Я думал о чем-то вроде that, но я не очень доволен этим кодом, так как он не учитывает частоту обновления устройства.

+1

+1 за хорошую ссылку, большая библиотека. – Orlymee

ответ

3

Хорошее место для начала - взглянуть на то, как система просмотра Android реализует ее. Радость с открытым исходным кодом.

Когда вы вызываете .animate() в представлении, вы возвращаете ViewPropertyAnimator, который после startAnimation() запускает ValueAnimator.

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

https://github.com/CyanogenMod/android_frameworks_base/blob/ics/core/java/android/view/ViewPropertyAnimator.java

https://github.com/CyanogenMod/android_frameworks_base/blob/ics/core/java/android/animation/ValueAnimator.java

+1

Спасибо за ссылки. Кажется, что анимация не использует другой поток, а только выделенный обработчик в текущей очереди сообщений потока. Я не уверен, что понимаю стратегию, лежащую в основе этого, это может вызвать отставание и заикание, если они оживляют, когда появляются сообщения, входящие в поток ... –

+0

Теперь, когда я помню, я кое-что прочитал, говоря, что Android сделал анимацию по-другому чем iOS. Последний использует выделенный поток с максимальным приоритетом. Это приводит к очень плавной анимации за счет обработки данных и отклика пользовательского интерфейса. Я не уверен, что я не предпочитаю iOS ... –

+0

Я попытаюсь реализовать выделенный поток/очередь с максимальным приоритетом с помощью Tween Engine для Android UI. Мы посмотрим, подходит ли это для удовольствия глаз. Это может даже привести к доказательству концепции Google, что они могут ошибаться. –

Смежные вопросы