Используется ли более эффективный подход?
Нет ничего плохого в использовании 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
Что вы имеете в виду, запустив анимацию медленно или быстро .. Вы говорите о частоте кадров? – amalBit
Да. Я обновил вопрос. – Confuse