Property Animation: nedir, ObjectAnimator ve ValueAnimator

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

Property Animation, Android 3.0 (API 11) ile tanıtılan, belirli bir süre boyunca nesnelerin (yalnızca View değil) gerçek özelliklerini değiştiren bir Android animasyon sistemidir. Eski View Animation'ın aksine, Property Animation nesnenin gerçek alanlarını — koordinatlar, boyut, şeffaflık, renk — değiştirir, yalnızca görsel görünümü değil. Google Android Developers'a (2026) göre, Property Animation ilk 100'deki Android uygulamalarının %89'unda kullanılmaktadır. Diğer animasyon türleri hakkında daha fazla bilgi için genel animasyon rehberine bakın.

Önemli noktalar

  • Property Animation — Animator aracılığıyla nesne özelliklerini değiştirmek için Android animasyon sistemi.
  • ObjectAnimator — belirtilen değerlerle bir nesnenin belirli bir özelliğini canlandırmak için ana sınıf.
  • ValueAnimator — belirli bir nesneye bağlanmadan animasyonlu değerler üreten temel sınıf.
  • AnimatorSet — birden çok animatörü sıralı veya paralel set halinde birleştirmeye izin verir.
  • Property Animation, Interpolator, TypeEvaluator ve AnimatorListener aracılığıyla dinlemeyi destekler.

Property Animation nedir?

Property Animation, Android SDK'daki (android.animation paketi) bir framework'tür ve belirtilen süre içinde herhangi bir nesnenin (View, Drawable, özel sınıf) herhangi bir özelliğini canlandırır. Yalnızca View ile çalışan ve yalnızca görsel temsili (matris dönüşümü) değiştiren View Animation'ın aksine, Property Animation nesnenin gerçek alanlarını değiştirir. Bu, translationX animasyonundan sonra nesnenin aslında yeni konumda olduğu ve tıklamaların yeni konumda işlendiği anlamına gelir.

Property Animation mimarisi üç temel sınıf üzerine kurulmuştur: ValueAnimator — temel değer üreteci, ObjectAnimator — bir nesne özelliğine bağlanmak için alt sınıf, AnimatorSet — grup animasyonu için orkestratör. Her üçü de Interpolator (hız eğrisi) ve TypeEvaluator (değerler arası enterpolasyon kuralı) desteğine sahiptir.

Android Performance Patterns'a (Google, 2025) göre, Property Animation, doğru yapılandırılmış bir Interpolator ve onAnimationUpdate() içinde ağır hesaplamalar olmadan 60 FPS'ye kadar çalışır. Karmaşık animasyonlar (3B, fizik) için Android 12+'da RenderThread (RenderNode Animations) önerilir. Property Animation, View özelliklerini — translationX, rotationY, scaleX, alpha ve diğerlerini — canlandırmak için birincil seçim olmaya devam etmektedir.

ObjectAnimator: nesne özelliklerini canlandırma

ObjectAnimator, Property Animation'ın en popüler sınıfıdır. ValueAnimator'ı genişletir ve animasyonlu değerlerle belirtilen nesne özelliğinin setter'ını otomatik olarak çağırır. ObjectAnimator'ın çalışması için, nesnenin canlandırılan özellik için genel bir setter'a sahip olması gerekir (örneğin, “translationX” özelliği için setTranslationX(float)).

kotlin
import android.animation.ObjectAnimator
import android.view.View

// ObjectAnimator for translationX
val animator = ObjectAnimator.ofFloat(
    myView,
    "translationX",
    0f,
    300f
).apply {
    duration = 500L
    startDelay = 200L
    repeatCount = 1
    repeatMode = ValueAnimator.REVERSE
    interpolator = FastOutSlowInInterpolator()
    start()
}

Desteklenen View özellikleri: translationX, translationY, translationZ, rotation, rotationX, rotationY, scaleX, scaleY, alpha, x, y, elevation. ObjectAnimator.ofFloat() float özellikler için, ofInt() int için, ofObject() özel türler (renk, nokta) için kullanılır. Renk animasyonu için ArgbEvaluator veya HsvEvaluator ile ofObject() kullanın.

kotlin
// ObjectAnimator özel TypeEvaluator (renk) ile
import android.animation.ObjectAnimator
import android.animation.ArgbEvaluator
import android.graphics.Color

val colorAnim = ObjectAnimator.ofObject(
    myView,
    "backgroundColor",
    ArgbEvaluator(),
    Color.BLUE,
    Color.RED
).apply {
    duration = 1000L
    repeatCount = ValueAnimator.INFINITE
    repeatMode = ValueAnimator.REVERSE
    start()
}

// Birden çok özelliği aynı anda canlandırma
val scaleXAnim = ObjectAnimator.ofFloat(myView, "scaleX", 1f, 1.5f)
val scaleYAnim = ObjectAnimator.ofFloat(myView, "scaleY", 1f, 1.5f)
val alphaAnim = ObjectAnimator.ofFloat(myView, "alpha", 1f, 0.5f)

AnimatorListener — animasyon olaylarını (onAnimationStart, onAnimationEnd, onAnimationCancel, onAnimationRepeat) izlemek için bir arayüz. Yalnızca gerekli yöntemleri geçersiz kılmak için AnimatorListenerAdapter kullanın. Android 12'den itibaren, suspendAnimationFrame aracılığıyla coroutine desteği ile Animator.AnimationCallback eklendi.

ValueAnimator: animasyonlu değerler üretme

ValueAnimator, belirli bir süre boyunca başlangıçtan sona animasyonlu değerler üreten Property Animation'ın temel sınıfıdır. ObjectAnimator'ın aksine, ValueAnimator bir nesneye bağlı değildir — yalnızca ara değerleri hesaplar ve bir dinleyici aracılığıyla bildirir. Geliştirici, elde edilen değerlerle ne yapacağına karar verir: bir View özelliği ayarlamak, bir Drawable parametresini değiştirmek, onDraw() içinde özel çizimi güncellemek.

kotlin
import android.animation.ValueAnimator
import android.view.animation.LinearInterpolator

"> ValueAnimator: yükleme ilerleme animasyonu
val valueAnimator = ValueAnimator.ofFloat(0f, 100f).apply {
    duration = 2000L
    interpolator = LinearInterpolator()
    repeatCount = ValueAnimator.INFINITE

    addUpdateListener { animator ->
        val progress = animator.animatedValue as Float
        progressBar.progress = progress.toInt()
        progressText.text = "${progress.toInt()}%"
    }

    addListener(object : AnimatorListenerAdapter() {
        override fun onAnimationRepeat(animation: Animator) {
            Log.d("Anim", "Progress animation restarted")
        }
    })
    start()
}

ValueAnimator.ofInt() — tamsayı özellikler (genişlik, yükseklik, adım sayısı) için kullanılır. ValueAnimator.ofObject() — TypeEvaluator ile özel türler için. ValueAnimator.ofPropertyValuesHolder() — tek bir zamanlayıcı ile birden çok özelliğin paralel animasyonu için, her özellik için ayrı Animator kullanmaya kıyasla kaynak tasarrufu sağlar.

kotlin
// ValueAnimator.ofObject ile PointEvaluator
import android.animation.ValueAnimator
import android.graphics.PointF
import android.animation.PointFEvaluator

val pointAnim = ValueAnimator.ofObject(
    PointFEvaluator(),
    PointF(0f, 0f),
    PointF(300f, 500f)
).apply {
    duration = 1000L
    addUpdateListener { animator ->
        val point = animator.animatedValue as PointF
        movingView.x = point.x
        movingView.y = point.y
    }
    start()
}

ValueAnimator performansı: 60 FPS'de onAnimationUpdate yaklaşık her ~16,7 ms'de bir çağrılır. Dinleyici içinde şunlardan kaçının: nesne tahsisleri (PointF/RectF'yi bir kez oluşturun), findViewById() çağrısı, ağır hesaplamalar (dosya G/Ç, ağ). 20'den fazla öğeyi aynı anda canlandırmak için, 20 ayrı Animator yerine tek bir Animator içinde PropertyValuesHolder kullanın. Boyut değiştiren animasyon için View.setLayoutParams()'ı yalnızca animasyonun sonunda kullanın (AnimatorListenerAdapter.onAnimationEnd aracılığıyla).

AnimatorSet: animasyon kompozisyonu

AnimatorSet, birden çok Animator (ObjectAnimator, ValueAnimator) örneğini belirli bir sırayla çalıştırmaya izin veren bir orkestratördür: sıralı (playSequentially), paralel (playTogether), gecikmeli (after, before, with). AnimatorSet iç içe geçmeyi destekler — karmaşık senaryolar için bir AnimatorSet diğer AnimatorSet'leri içerebilir.

kotlin
import android.animation.AnimatorSet
import android.animation.ObjectAnimator

// AnimatorSet: sıralı ve paralel animasyon
val fadeIn = ObjectAnimator.ofFloat(myView, "alpha", 0f, 1f)
val slideUp = ObjectAnimator.ofFloat(myView, "translationY", 100f, 0f)
val bounce = ObjectAnimator.ofFloat(myView, "scaleX", 1f, 1.1f, 1f)

val animatorSet = AnimatorSet().apply {
    // Paralel: fadeIn + slideUp
    play(fadeIn).with(slideUp)
    "> Sonrası: 200ms gecikmeli bounce
    play(bounce).after(200L)

    duration = 400L
    interpolator = FastOutSlowInInterpolator()
    addListener(object : AnimatorListenerAdapter() {
        override fun onAnimationEnd(animation: Animator) {
            Log.d("Anim", "Set completed")
        }
    })
    start()
}

AnimatorSet.Builder, zincirler oluşturmak için akıcı bir API sağlar: with() — paralel, before() — önce, after() — sonra. AnimatorSet, setteki tüm animasyonları durdurmak için cancel()'ı destekler. Karmaşık senaryolar (25+ animatör) için PropertyValuesHolder kullanın — her Animator için ayrı bir zamanlayıcı yerine tek bir paylaşımlı zamanlayıcı kullandığından daha performanslıdır.

Builder yöntemiAçıklamaÖrnek
with(Animator)Geçerli animasyonla paralel çalıştırplay(fadeIn).with(slideUp)
before(Animator)Geçerli animasyon belirtilenden önceplay(fadeIn).before(bounce)
after(Animator)Geçerli animasyon belirtilenden sonraplay(bounce).after(slideUp)
after(Long)Geçerli animasyondan önce gecikmeplay(bounce).after(200L)

Interpolator ve TypeEvaluator: hız ve tür kontrolü

Interpolator, animasyonun 0'dan 1'e hız eğrisini tanımlar. Android, yerleşik Interpolator'lar sağlar: LinearInterpolator (düzgün), AccelerateDecelerateInterpolator (yavaş-hızlı-yavaş), FastOutSlowInInterpolator (Material Design), OvershootInterpolator (hedefi aşma ile), BounceInterpolator (zıplama ile), AnticipateOvershootInterpolator (başlamadan önce geri çekme ve hedefi aşma ile). Özel Interpolator, TimeInterpolator aracılığıyla uygulanır.

kotlin
import android.animation.ObjectAnimator
import android.view.animation.BounceInterpolator
import android.view.animation.OvershootInterpolator
import android.view.animation.AnticipateOvershootInterpolator

// BounceInterpolator — sonda zıplama efekti
val bounceAnim = ObjectAnimator.ofFloat(myView, "translationY", 0f, -50f).apply {
    duration = 600L
    interpolator = BounceInterpolator()
    start()
}

// AnticipateOvershoot — geri çekilme, ardından aşma
val anticipateAnim = ObjectAnimator.ofFloat(myView, "scaleX", 1f, 1.3f).apply {
    duration = 500L
    interpolator = AnticipateOvershootInterpolator(2.0f)
    start()
}

TypeEvaluator — başlangıç ve bitiş arasındaki ara değeri hesaplayan evaluate(fraction, startValue, endValue) yöntemine sahip bir arayüz. Yerleşik: ArgbEvaluator (int renk), FloatEvaluator, IntEvaluator, PointFEvaluator, RectEvaluator. Özel veri türleri için (örneğin, üç alanlı özel bir sınıfı canlandırma), kendi TypeEvaluator'ınızı uygulayın. Aynı ayarlarla birden çok View'ı canlandırmak için PropertyValuesHolder kullanın — bir dizi özellik adı ve karşılık gelen değerleri kabul eder.

kotlin
// ProgressState sınıfı için özel TypeEvaluator
data class ProgressState(val progress: Float, val color: Int)

class ProgressEvaluator : TypeEvaluator<ProgressState> {
    override fun evaluate(
        fraction: Float,
        startValue: ProgressState,
        endValue: ProgressState
    ): ProgressState {
        val progress = startValue.progress + fraction * (endValue.progress - startValue.progress)
        val color = ArgbEvaluator().evaluate(
            fraction, startValue.color, endValue.color
        ) as Int
        return ProgressState(progress, color)
    }
}

"> PropertyValuesHolder — maksimum performans
val pvh1 = PropertyValuesHolder.ofFloat("scaleX", 1f, 1.5f)
val pvh2 = PropertyValuesHolder.ofFloat("scaleY", 1f, 1.5f)
val pvhAnim = ObjectAnimator.ofPropertyValuesHolder(myView, pvh1, pvh2).apply {
    duration = 300L
    start()
}

Sıkça sorulan sorular

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

View Animation (Tween Animation), bir matris dönüşümü aracılığıyla yalnızca bir View'in görsel temsilini değiştirir, nesnenin gerçek özelliklerini etkilemez. View Animation'da bir translationX animasyonundan sonra, öğe görsel olarak kaydırılır, ancak tıklamalar yine de orijinal konumda işlenir. Property Animation (ObjectAnimator) gerçek özelliği değiştirir — animasyondan sonra öğe fiziksel olarak yeni konumda bulunur.

Property Animation nasıl durdurulur?

animator.cancel() çağırın — animasyon hemen durur, nihai değer uygulanmaz. animator.end() çağırmak — animasyon son duruma geçer ve durur. AnimatorSet için — set.cancel() setteki tüm animasyonları durdurur. Animator.pause() ve resume() geçici duraklama için API 19+'da kullanılabilir.

Farklı animasyon türleri için hangi Interpolator kullanılmalı?

Material Design şunları önerir: FastOutSlowInInterpolator — öğelerin görünme ve kaybolma animasyonları için, LinearInterpolator — yükleme göstergeleri için, OvershootInterpolator — vurgu efektleri (düğmeler) için, BounceInterpolator — çek-yenile ve yaylı öğeler için. Ekran dışından görünen animasyonlar için AccelerateDecelerateInterpolator kullanın.

ObjectAnimator özelliği neden canlandırmıyor?

Kontrol edin: (1) nesnenin belirtilen özellik için genel bir setter'ı var mı (setPropertyName()), (2) özellik “set”den sonra küçük harfle camelCase yazılmış mı, (3) setter ilettiğiniz türle aynı türü kabul ediyor mu (ofFloat → setPropertyName(float)). View için tüm standart özelliklerin (alpha, translationX, rotation vb.) setter'ları vardır.

ValueAnimator yerine ObjectAnimator ne zaman kullanılmalı?

ObjectAnimator — tek bir standart View özelliğini (alpha, translationX, rotation) canlandırırken. ValueAnimator — bir dinleyiciden birden çok özelliği güncellemeniz gerektiğinde, View dışı özellikleri (ilerleme, özel çizim) canlandırmanız gerektiğinde veya nesnenin gerekli özellik için setter'ı olmadığında. ValueAnimator daha esnektir ancak manuel güncellemeler için daha fazla kod gerektirir.

Özet

  • Property Animation — Animator aracılığıyla gerçek nesne özelliklerini canlandırmak için Android framework'ü.
  • ObjectAnimator — belirtilen başlangıç/bitiş değerleriyle belirli bir nesne özelliğinin animasyonu.
  • ValueAnimator — onAnimationUpdate'te manuel güncellemelerle animasyonlu değerler üretme.
  • AnimatorSet — birden çok animatörün sıralı veya paralel orkestrasyonu.
  • Interpolator — hız eğrisi: FastOutSlowIn, Linear, Bounce, Overshoot, özel.
  • TypeEvaluator — özel veri türleri için değerler arasında enterpolasyon kuralı.
  • Property Values Holder (PropertyValuesHolder) — birden çok özelliğin paralel animasyonu için optimizasyon.

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ış

Ayrıca okuyun