Ответ
Разработка приложения для фитнес-трекера с кастомными графиками и анимациями. Столкнулся с проблемой плавного отображения данных в реальном времени на Canvas. Решение — использование ValueAnimator для интерполяции значений и invalidate() для перерисовки.
Пример анимации графика:
ValueAnimator.ofFloat(0f, 1f).apply {
duration = 1000
interpolator = AccelerateDecelerateInterpolator()
addUpdateListener { animator ->
progress = animator.animatedValue as Float
customView.invalidate()
}
start()
}
Особенно запомнился момент, когда после оптимизации FPS вырос с 30 до 60.