Mobil uygulamalarda animasyon, onları canlı ve duyarlı hale getirir, kullanıcının dikkatini yönlendirir ve arayüz algısını iyileştirir. Bu makalede iOS ve Android'deki temel animasyon türlerini inceleyeceğiz: Property Animation, View Animation, UIKit Dynamics, Core Animation, Lottie, Rive, Spring Animation, Hero Animation ve Shared Element Transition. Materyal, yeni başlayan geliştiricilerin belirli bir görev için hangi araçları ve kitaplıkları seçeceklerini anlamalarına yardımcı olacaktır. Daha fazla ayrıntı — resmi Android Animations dokümantasyonunda.
Ana Noktalar
Android iki ana animasyon sistemi sağlar: View Animation (eski) ve Property Animation (modern). View Animation (veya Tween Animation) yalnızca görsel temsil ile çalışır — Görünümün görüntülenmesini değiştirir ancak gerçek özelliklerini değiştirmez (örneğin, tıklama koordinatları yerinde kalır). Android 3.0'da tanıtılan Property Animation, Animator — ValueAnimator, ObjectAnimator veya AnimatorSet aracılığıyla gerçek nesne özelliklerini değiştirir.
ObjectAnimator, Property Animation'ın en popüler sınıfıdır. Belirli bir nesne özelliğini (örneğin, translationX, alpha, scaleY) belirtilen bir süre boyunca belirli bir Interpolator ile canlandırır.
ObjectAnimator.ofFloat(myView, "translationX", 0f, 300f).apply {
duration = 500
interpolator = FastOutSlowInInterpolator()
startDelay = 200
}.start()
ValueAnimator belirli bir nesneye bağlı değildir — herhangi bir özellik veya özel mantık için kullanılabilecek değerler üretir.
View Animation, res/anim/ XML dosyalarında tanımlanır. Dört tür desteklenir: scale, translate, rotate, alpha. Dezavantajı, animasyonun gerçek Görünüm parametrelerini değiştirmemesidir. Basit efektler (yanıp sönme, döndürme) için View Animation hala uygulanabilir, ancak yeni projeler için Property Animation önerilir.
Jetpack Compose modern bir animasyon API'si sunar: animateAsState, Animatable, AnimatedVisibility ve AnimatedContent. Compose'da animasyon reaktiftir: durum değiştiğinde animasyon otomatik olarak başlar.
var expanded = remember { mutableStateOf(false) }
val size = animateAsState(
if (expanded) 200f else 50f
)
Box(
modifier = Modifier
.size(size.value, size.value)
.clickable { expanded = !expanded }
.background(Color.Blue)
)
iOS, Core Animation — CALayer ile çalışan düşük seviyeli bir framework — tabanlı güçlü bir animasyon yığını sağlar. UIKit, Core Animation üzerine kullanışlı UIView.animate ve UIViewPropertyAnimator yöntemleriyle inşa edilir.
UIView.animate, iOS'te animasyon yapmanın en basit yoludur. frame, alpha, transform, backgroundColor ve diğer UIView özelliklerini canlandırmaya olanak tanır.
UIView.animate(
withDuration: 0.5,
delay: 0.2,
usingSpringWithDamping: 0.6,
initialSpringVelocity: 1.0,
options: [.curveEaseInOut]
) {
myView.frame.origin.x += 300
myView.alpha = 0.5
}
UIKit Dynamics — fiziksel animasyon için bir framework: yerçekimi, çarpışmalar, yaylar, çekim kuvvetleri. Manuel fizik hesaplaması olmadan gerçekçi nesne davranışı oluşturmaya olanak tanır. Özel geçişler, animasyonlu menüler ve oyun öğeleri için kullanılır.
Core Animation (CAAnimation, CABasicAnimation, CAKeyframeAnimation) — CALayer animasyonu için düşük seviyeli bir API. 3D dönüşümleri, yol animasyonunu (keyframe), maskeleme ve kompozisyonu destekler. SwiftUI, animation ve withAnimation değiştiricileri aracılığıyla perde arkasında Core Animation'ı kullanır.
let animation = CABasicAnimation(keyPath: "transform.rotation.z")
animation.fromValue = 0
animation.toValue = CGFloat.pi * 2
animation.duration = 1.0
animation.repeatCount = .infinity
myLayer.add(animation, forKey: "rotation")
Çoğu iOS projesi için yerleşik animasyonuyla SwiftUI kullanılır. Örneğin, withAnimation durum değişikliklerini animasyonlu bir bağlama sarar.
Karmaşık animasyonları (karakterler, geçişler, yükleyiciler) kodla uygulamak zordur. Lottie ve Rive, tasarımcıların görsel düzenleyicilerde animasyon oluşturmasına ve geliştiricilerin bunları hazır bir bileşen olarak uygulamaya yerleştirmesine olanak tanıyarak bu sorunu çözer.
Lottie — Airbnb'den (şimdi LottieFiles) JSON formatında dışa aktarılan Adobe After Effects animasyonlarını oluşturan bir kitaplık. Android, iOS, Flutter, React Native ve Web'de desteklenir. Lottie animasyonları vektör tabanlıdır, kalite kaybı olmadan ölçeklenir ve programlı olarak özelleştirilebilir (hız, ilerleme, renkler).
// Android import com.airbnb.lottie.LottieAnimationView val lottieView = findViewById<LottieAnimationView>(R.id.lottieView) lottieView.setAnimation(R.raw.loading_animation) lottieView.playAnimation()
Rive (önceden 2Dimensions) — vektör animasyonu için daha gelişmiş bir araç. Lottie'nin aksine Rive, etkileşimli animasyonu destekler: durumlar, tetikleyiciler, geçişler. Animasyon Rive Editor'da oluşturulur ve uygulamada bir State Machine aracılığıyla kontrol edilir. Rive, oyun arayüzleri, animasyonlu simgeler ve geri bildirimli karmaşık geçişler için uygundur.
IT Sectr'de dekoratif animasyonlar (yükleyiciler, başarılı işlemler, boş durumlar) için Lottie'yi ve onboarding ekranlarının etkileşimli öğeleri için Rive'ı kullanıyoruz. Bu, UIKit veya Canvas ile manuel uygulamaya kıyasla animasyon geliştirme süresini %60 oranında azaltır.
Shared Element Transition — bir öğenin (görüntü, metin, kart) ekranlar arasında geçiş yaparken yumuşak bir şekilde hareket ettiği ve dönüştüğü bir animasyon. Bu, süreklilik yanılsaması yaratır: kullanıcı yeni bir ekrana "gitmez", öğenin "içine dalar".
Android'de geçiş, ActivityOptionsCompat ve transitionName öznitelikleri aracılığıyla uygulanır. FragmentTransaction, bir Activity içindeki geçişler için addSharedElement'ı destekler. Compose, SharedContentState ile SharedTransitionLayout kullanır.
iOS'ta yerleşik bir Hero Transition yoktur, ancak Hero kitaplığı (Luke Zhao tarafından) bu deseni UIKit'te uygular. Her iki ekrandaki öğelere bir kimlik atamanız yeterlidir — Hero otomatik olarak yumuşak bir geçiş oluşturur. SwiftUI'de geçiş animasyonu, NavigationStack ve matchedGeometryEffect aracılığıyla yerleşiktir.
Flutter, bir tag parametresiyle yerleşik bir Hero widget'ına sahiptir. İki sayfa aynı tag ile Hero içerdiğinde, Flutter aralarındaki geçişi otomatik olarak canlandırır. Bu, mobil bir uygulamada karmaşık animasyon uygulamanın en basit yollarından biridir.
Hero( tag: 'profile_avatar', child: CircleAvatar( backgroundImage: AssetImage('avatar.jpg'), radius: 50, ), )
Bir animasyonun doğal görünmesi için hız eğrileri kullanılır — Android'de Interpolator ve iOS'te Easing. Bunlar, animasyon hızının baştan sona nasıl değiştiğini belirler.
Android birkaç yerleşik Interpolator'ı destekler: LinearInterpolator (tekdüze), AccelerateDecelerateInterpolator (yavaş-hızlı-yavaş), FastOutSlowInInterpolator (Material Design), OvershootInterpolator (aşırımlı) ve BounceInterpolator (sekmeli). Özel bir Interpolator, XML veya TimeInterpolator sınıfı aracılığıyla oluşturulabilir.
| Interpolator | Davranış | Kullanım |
|---|---|---|
| LinearInterpolator | Sabit hız | Yükleme göstergeleri, sonsuz dönüşler |
| FastOutSlowInInterpolator | Hızlı başlangıç, yumuşak bitiş | Material Design, kart görünümü |
| OvershootInterpolator | Hedefi aşar ve geri döner | Vurgu öğeleri, düğmeler |
| BounceInterpolator | Sonda sekme | Listeler, pull-to-refresh |
Spring Animation (yay animasyonu), damping (sönümleme) ve stiffness (sertlik) parametreleriyle yay fiziğini modeller. Sönümleme 0 — sonsuz salınımlar, 1 — salınım yok. Sertlik, dönüş hızını belirler. Spring Animation, iOS (UISpringTimingParameters ile UIViewPropertyAnimator), Android (physics2'den SpringAnimation) ve SwiftUI'de (spring()) mevcuttur.
Android'de Spring Animation dokümantasyonu, ayrıntılı yapılandırma örnekleri içerir.
Timeline (zaman çizelgesi) — animasyonun zaman içinde karelere bölündüğü bir yaklaşım. AnimationSet veya Grup animasyonunun yeterince esnek olmadığı karmaşık diziler için kullanılır. Android AnimatorSet'i, iOS — CAAnimationGroup'u, Flutter — AnimationController'da Interval'i destekler.
Часто задаваемые вопросы
View Animation (Android) yalnızca bir Görünümün görsel görüntüsünü değiştirir, gerçek özellikleri değiştirmez (tıklama konumu değişmez). Property Animation, gerçek nesne özelliklerini değiştirerek daha esnek ve öngörülebilir davranış sağlar. Yeni projeler için her zaman Property Animation kullanın.
Hero Animation, bir öğenin ekranlar arasında geçiş yaparken yumuşak bir şekilde hareket ettiği ve dönüştüğü, süreklilik yanılsaması yaratan bir animasyondur. Hero (Flutter), SharedElementTransition (Android) veya matchedGeometryEffect (SwiftUI) aracılığıyla uygulanır.
Lottie ve Rive, çalışma zamanında vektör animasyonu oluşturmak için kitaplıklardır. Tasarımcı animasyonu After Effects (Lottie) veya Rive Editor'da oluşturur, JSON'a dışa aktarır ve geliştirici manuel olarak animasyon kodu yazmadan bunu yerleştirir.
Spring Animation yay fiziğini modeller: animasyonun doğal sönümlemesi ve "sekmesi" vardır. SwiftUI ve Jetpack Compose, spring animasyonlarını kutudan çıkar çıkmaz destekleyerek arayüzü daha canlı ve duyarlı hale getirir.
Seçim bağlama bağlıdır: FastOutSlowIn — öğelerin görünmesi için, Overshoot — vurgular için, Linear — yükleme göstergeleri için, Bounce — listeler için. Material Design standart eğrileri önerir: standard easing, deceleration easing ve acceleration easing.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.