2017-01-13 4 views
0

Я пытаюсь создать кадр за кадром анимации шарика, похожей на this.Есть ли Canvas onDraw приурочен?

Хотя он отлично работает на моем устройстве, анимация на самом деле не синхронизирована. Итак, onDraw() по времени (т.е. периодически вызываемый с определенной задержкой)? Или возможно, что на устройстве с очень высокой частотой кадров анимация работает быстро и медленно запускается на устройствах с низкой частотой кадров.

Использует runnable лучший подход?

+0

Что вы имеете в виду, запустив анимацию медленно или быстро .. Вы говорите о частоте кадров? – amalBit

+0

Да. Я обновил вопрос. – Confuse

ответ

1

Используется ли более эффективный подход?

Нет ничего плохого в использовании runnable. Ваше требование - запустить 60 кадров в секунду на хороших телефонах и меньше fps на нижних конечных устройствах:

Is Canvas onDraw timed?

В настоящее время ваш холст onDraw() должен запускаться каждые 16 мс, чтобы получить анимацию 60 кадров в секунду. Чтобы уменьшить его, запускайте каждые 32 мс в зависимости от вашего состояния.

Примечание:
Мы можем вызвать только метод onDraw, вызвав invalidate на представлении холста. Но мы не можем быть на 100% уверены, что все ваши недействительные приведут к перерисовке. Здесь некоторые кадры снижаются, здесь и там, будет снимать блеск из вашей анимации.


Моего 2 цента:

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

https://hackernoon.com/android-draw-a-custom-view-ef79fe2ff54b#.vtdmbs95g

https://medium.com/dualcores-studio/make-an-android-custom-view-publish-and-open-source-99a3d86df228#.3jdi1pbt7