Mobil geliştirmede animasyon: nedir, hangi türleri vardır ve nasıl kullanılır

Yazar: IT Sectr Yayınlanma: 2026-02-26 Okuma süresi: 10 dk

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

  • Property Animation (Android) gerçek nesne özelliklerini değiştirir, View Animation — yalnızca görsel görünümü
  • Core Animation ve UIView.animate (iOS) katmanları ve görünümleri canlandırmak için yerleşik yetenekler sağlar
  • Lottie ve Rive, After Effects ve Rive Editor'dan karmaşık vektör animasyonu yerleştirmeye olanak tanır
  • Hero Animation (Shared Element Transition) ekranlar arasında yumuşak geçişler oluşturur
  • Yay fiziği ile Spring Animation ve Easing (Interpolator) animasyonu doğal hale getirir

Android'de Animasyon: Property Animation ve View Animation

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 ve ValueAnimator

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.

kotlin
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 ve XML Animasyonları

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'da Animasyon

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.

kotlin
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'te Animasyon: Core Animation ve UIView.animate

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

UIView.animate, iOS'te animasyon yapmanın en basit yoludur. frame, alpha, transform, backgroundColor ve diğer UIView özelliklerini canlandırmaya olanak tanır.

swift
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

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.

CAAnimation ve Core Animation

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.

swift
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.

Vektör Animasyonu: Lottie ve Rive

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

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).

kotlin
// Android
import com.airbnb.lottie.LottieAnimationView
val lottieView = findViewById<LottieAnimationView>(R.id.lottieView)
lottieView.setAnimation(R.raw.loading_animation)
lottieView.playAnimation()

Rive

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 ve Hero Animation

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 Shared Element Transition

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 Hero Transition

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 Hero

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.

dart
Hero(
    tag: 'profile_avatar',
    child: CircleAvatar(
        backgroundImage: AssetImage('avatar.jpg'),
        radius: 50,
    ),
)

Spring Animation, Interpolator ve Easing

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 Interpolator'ları

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
LinearInterpolatorSabit hızYükleme göstergeleri, sonsuz dönüşler
FastOutSlowInInterpolatorHızlı başlangıç, yumuşak bitişMaterial Design, kart görünümü
OvershootInterpolatorHedefi aşar ve geri dönerVurgu öğeleri, düğmeler
BounceInterpolatorSonda sekmeListeler, pull-to-refresh

Spring Animation

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.

Zaman Çizelgesi Animasyonu

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.

Часто задаваемые вопросы

Property Animation, View Animation'dan nasıl farklıdır?

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 nedir?

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 ne işe yarar?

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 nedir ve neden faydalıdır?

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.

Doğru Interpolator nasıl seçilir?

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

  • Property Animation (Android ObjectAnimator) — View Animation'ın yerini alan modern standart
  • iOS, katman düzeyinde animasyon kontrolü için UIView.animate ve Core Animation kullanır
  • Lottie ve Rive, tasarım araçlarından karmaşık vektör animasyonu yerleştirmeyi basitleştirir
  • Hero Animation (Shared Element Transition) ekranlar arası gezinme algısını iyileştirir
  • Spring Animation ve doğru Interpolator / Easing seçimi animasyonu doğal hale getirir
  • Flutter, geçişler için yerleşik bir Hero widget'ı ve özel animasyon için AnimationController sağlar
  • Jetpack Compose ve SwiftUI, animateAsState ve withAnimation aracılığıyla yerleşik reaktif animasyona sahiptir

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.

Projeyi tartış