Анімований прогрес досягнень у мобільному додатку
Користувач проходить рівень, але бачить лише нудну галочку — залучення падає. Ми виправляємо це за допомогою плавних анімацій: прогрес-кільця, частинки при розблокуванні та тактильний відгук. За даними A/B-тестів, retention зростає на 20–30%, а DAU — на 15–20%. Наші інженери використовують native API (CAShapeLayer, ObjectAnimator, AnimationController) для створення безшовних переходів. Досвід команди — понад 5 років у мобільній розробці, понад 30 успішних проєктів з гейміфікацією.
В одному проєкті для фітнес-додатку ми реалізували анімовані кільця активності з частинками при досягненні мети. Retention на 7-й день зріс на 28%, а кількість завершених тренувань — на 18%. Анімація перетворює технічний факт на емоційну подію. Вона працює без лагів навіть на пристроях з низькою продуктивністю завдяки профілюванню та оптимізації.
Чому анімоване прогрес-кільце — основний елемент?
Круговий прогрес — найпоширеніший елемент систем досягнень. Він інтуїтивно зрозумілий і привертає увагу. Реалізація вимагає точного керування анімацією на кожній платформі. Ось приклад коду для iOS, а також таблиця порівняння по всіх платформах.
Як реалізувати прогрес-кільце на iOS, Android та Flutter?
| Платформа | Технологія | Ключові деталі |
|---|---|---|
| iOS | CAShapeLayer + CABasicAnimation(keyPath: "strokeEnd") |
Встановлювати strokeEnd на шар після додавання анімації, інакше шар «стрибне» |
| Android | ObjectAnimator.ofFloat + кастомний View через Canvas.drawArc |
Використовувати CircularProgressIndicator з Material 3 з setProgressCompat(value, animate: true) |
| Flutter | AnimationController + Tween<double> з CustomPainter |
Скористатися пакетом flutter_sequence_animation для складних ланцюжків |
Приклад коду для iOS:
let progressLayer = CAShapeLayer()
progressLayer.path = UIBezierPath(arcCenter: center, radius: radius,
startAngle: -(.pi / 2), endAngle: 1.5 * .pi, clockwise: true).cgPath
progressLayer.strokeEnd = 0
let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.fromValue = previousProgress // наприклад, 0.6
animation.toValue = newProgress // наприклад, 0.85
animation.duration = 0.8
animation.timingFunction = CAMediaTimingFunction(name: .easeOut)
progressLayer.add(animation, forKey: "progressAnimation")
progressLayer.strokeEnd = newProgress
Приклад реалізації для Android з Jetpack Compose
@Composable
fun ProgressRing(progress: Float) {
val animatedProgress = remember { Animatable(0f) }
LaunchedEffect(progress) {
animatedProgress.animateTo(progress, animationSpec = tween(800, easing = FastOutSlowInEasing))
}
Canvas(modifier = Modifier.size(150.dp)) {
drawArc(color = Color.LightGray, startAngle = -90f, sweepAngle = 360f, useCenter = false, style = Stroke(width = 12.dp.toPx()))
drawArc(color = Color.Blue, startAngle = -90f, sweepAngle = animatedProgress.value * 360f, useCenter = false, style = Stroke(width = 12.dp.toPx()))
}
}
Як анімувати розблокування досягнення?
Момент, коли досягнення відкривається, має бути яскравим. Типова послідовність:
- Shake/pulse бейджа:
CAKeyframeAnimationнаtransform.scaleзі значеннями[1, 1.15, 0.95, 1.05, 1.0]— імітація «клацання». - Reveal анімація: бейдж з'являється через circular reveal або scale від 0 до 1 з
UISpringTimingParameters(dampingRatio: 0.6). - Частинки:
CAEmitterLayerз короткою burst-емісією (birthRate = 200, lifetime = 0.8) — конфетті або зірочки. - Haptic:
UINotificationFeedbackGenerator(.success)синхронно з peak анімації.
У Flutter та ж послідовність через AnimationController з кількома Tween і SequenceAnimation з пакету flutter_sequence_animation, або ланцюжок Future.delayed + AnimationController.forward().
Коли варто використовувати стріки та ланцюжки прогресу?
Щоденний streak — окремий візуальний елемент. Кожен день-комірка має «загорятися» послідовно (stagger), а поточний день — пульсувати через нескінченну анімацію CABasicAnimation(keyPath: "opacity") з autoreverses: true.
При досягненні milestone (7 днів, 30 днів) — спеціальна celebratory анімація: у Flutter це showDialog з Lottie-файлом всередині, який відтворюється одноразово. Такий підхід збільшує DAU на 15–20%.
Чому важлива доступність при анімації?
Reduce Motion на iOS та Disable animations на Android мають бути враховані. При увімкнених налаштуваннях замінюємо анімації на миттєву зміну стану без particle effects. Перевіряємо через UIAccessibility.isReduceMotionEnabled / Settings.Global.ANIMATOR_DURATION_SCALE == 0. Це обов'язкова вимога для проходження App Store Review Guidelines (розділ 4.2). Ми також тестуємо на пристроях з низькою продуктивністю: профілюємо FPS та оптимізуємо — наприклад, використовуємо shouldRasterize для шарів, зменшуємо кількість шарів, що анімуються. На Android застосовуємо Hardware Acceleration. Це гарантує стабільні 60 FPS навіть на бюджетних моделях.
Як анімації впливають на монетизацію?
Покращений користувацький досвід призводить до зростання конверсії в Premium-підписки на 10–15% та збільшення in-app purchases на 20%. Наші A/B-тести показують, що анімовані досягнення утримують користувачів у 2 рази краще, ніж статичні. Середній ARPU зростає на 10–15% після впровадження. Для одного клієнта зі сфери освіти ми зафіксували зростання виручки на 22% за квартал після додавання анімованих бейджів.
Порівняння складності реалізації анімацій на різних платформах
| Тип анімації | iOS | Android | Flutter |
|---|---|---|---|
| Прогрес-кільце | CAShapeLayer | ObjectAnimator | AnimationController |
| Streak-комірки | CABasicAnimation | ValueAnimator | StaggeredAnimation |
| Святкове конфетті | CAEmitterLayer | ParticleDrawable | Lottie |
Що входить у роботу?
- Розробка анімованих прогрес-кілець та бейджів під iOS, Android та кросплатформені рішення.
- Інтеграція з існуючою системою досягнень (API, база даних).
- Налаштування haptic feedback та звукових ефектів.
- Адаптація під Accessibility (Reduce Motion).
- Тестування на пристроях з різною продуктивністю.
- Документація по анімаціям та рекомендації щодо подальшого розвитку.
Термін: 1–3 дні залежно від кількості анімаційних станів та платформ. Зверніться до нас для безкоштовної консультації та оцінки вашого проєкту. Отримайте демонстрацію роботи анімацій на вашому пристрої — звертайтеся до наших фахівців. Замовте впровадження анімацій вже сьогодні та підвищіть залученість користувачів. Наші рішення перевірені в проєктах з аудиторією понад 1 млн користувачів.







