View Animation, Tween Animation (Alpha, Translate, Scale, Rotate) aracılığıyla View nesneleriyle çalışan Android API 1+'ın eski bir animasyon sistemidir. Google, tüm yeni projeler için Property Animation (Animator) önermektedir. Bu makale, ilkeleri, türleri, XML işaretlemesini ve kullanımdan kaldırma nedenlerini açıklamaktadır.
Önemli Noktalar
View Animation, View seviyesinde (API 1+) çalışan bir Android animasyon alt sistemidir. Dört tür Tween Animation kullanır: AlphaAnimation (şeffaflık), TranslateAnimation (hareket), ScaleAnimation (ölçek) ve RotateAnimation (döndürme). Her animasyon res/anim/ klasöründeki bir XML dosyasında tanımlanır veya Kotlin kodunda programlı olarak oluşturulur.
View Animation mekanizması, bir View'ın gerçek özelliklerini değiştirmez — View'ı yeni bir konumda, ölçekte veya şeffaflıkta yeniden çizer, ancak onTouchEvent() geri çağırması orijinal konumun koordinatlarını alır. Bu, tıklama uyuşmazlığı (click mismatch) olarak bilinen önemli bir sınırlamadır.
Android Geliştirici Dokümantasyonuna (2026) göre Google, Android 3.0'dan (API 11) itibaren View Animation'ı kullanımdan kaldırılmış bir API olarak işaretlemiştir. Yeni projeler için, setter yöntemleri aracılığıyla gerçek nesne özellikleriyle çalışan Property Animation — Animator, AnimatorSet ve ObjectAnimator önerilir.
Tween Animation, ana kareler “arasındaki” animasyondur: başlangıç ve bitiş durumunu tanımlarsınız ve sistem ara kareleri hesaplar. Android, her biri kendi parametre setine sahip dört standart tür sağlar.
AlphaAnimation, bir View'ın şeffaflığını fromAlpha'dan toAlpha'ya değiştirir. Değerler 0.0 (tamamen şeffaf) ile 1.0 (tamamen görünür) arasındadır. Varsayılan olarak animasyon 300 ms sürer. fillAfter=true parametresi View'ı son şeffaflık durumunda bırakır.
<!-- res/anim/fade_out.xml -->
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="500"
android:fillAfter="true" />TranslateAnimation, bir View'ı başlangıç konumundan (fromXDelta, fromYDelta) bitiş konumuna (toXDelta, toYDelta) taşır. Değerler piksel, üst öğenin yüzdesi veya View'ın kendi yüzdesi olarak belirtilir. Örneğin, %100, View genişliğinin %100'ü anlamına gelir.
ScaleAnimation, bir View'ı pivotX/pivotY noktasına göre ölçeklendirir. fromXScale=1.0, toXScale=2.0 genişliği iki katına çıkarır. pivotType parametresi, pivotun neye göre hesaplandığını belirler: self, parent veya absolute. Ölçek animasyonu View'ın gerçek boyutlarını değiştirmez — yalnızca görüntülemeyi değiştirir.
RotateAnimation, bir View'ı bir pivot noktası etrafında fromDegrees'ten toDegrees'e kadar bir açıyla döndürür. Açı derece cinsinden ölçülür: 0 orijinal konum, 360 tam bir dönüştür. Sonsuz döndürme için repeatCount=INFINITE kullanın.
View Animation ve Property Animation (Animator) arasındaki fark, Android animasyon mimarisinde temel bir ayrımdır. View Animation yalnızca görüntüleme üzerinde çalışırken, Property Animation setter yöntemleri aracılığıyla gerçek nesne özelliklerini değiştirir ve bu da düzen güncellemelerine yol açar.
| Kriter | View Animation | Property Animation |
|---|---|---|
| API Seviyesi | API 1+ (kullanımdan kaldırıldı) | API 11+ (önerilen) |
| Neyi canlandırır | View görüntüleme (canvas) | Nesne özellikleri (setter) |
| Animasyon sonrası tıklama | Orijinal konumda | Yeni konumda |
| Animasyon türleri | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | Değiştirmez | setLayoutParams ile değiştirir |
| Performans | Yüksek (sadece canvas) | Orta (setter'a bağlı) |
View Animation genellikle res/anim/ içindeki XML dosyalarında bir kök öğe
<!-- res/anim/bounce.xml -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/bounce_interpolator">
<translate
android:fromYDelta="0%"
android:toYDelta="-100%"
android:duration="600" />
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.3"
android:duration="600" />
</set>XML dosyası AnimationUtils.loadAnimation() aracılığıyla yüklenir. Interpolator, parametrenin zaman içinde nasıl değiştiğini tanımlar: accelerate, decelerate, bounce, overshoot. Özel bir Interpolator, XML kaynağı @anim/interpolator_name aracılığıyla oluşturulur.
Tüm Tween animasyonları nitelikleri destekler: duration (ms), startOffset (başlamadan önce gecikme), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. fillAfter niteliği, View'ın tamamlandıktan sonra animasyonun son durumunda kalıp kalmayacağını belirler.
Animasyonlar genellikle XML içinde tanımlansa da, Kotlin kullanılarak programlı olarak da oluşturulabilir. Programlı yaklaşım, dinamik parametreler için kullanışlıdır: şeffaflık değeri statik olarak tanımlanmak yerine uygulama durumuna bağlıdır.
// Kotlin'de programlı olarak AlphaAnimation oluşturma
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.View
fun View.fadeOut(duration: Long = 500L, onEnd: () -> Unit = {}) {
val animation = AlphaAnimation(1.0f, 0.0f).apply {
this.duration = duration
fillAfter = true
setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationEnd(animation: Animation?) { onEnd() }
override fun onAnimationStart(animation: Animation?) {}
override fun onAnimationRepeat(animation: Animation?) {}
})
}
startAnimation(animation)
}
// XML'den animasyon yükleme
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)
// AnimationSet — animasyonların birleştirilmesi
val set = AnimationSet(true).apply {
addAnimation(TranslateAnimation(0f, 200f, 0f, 0f).apply { duration = 400 })
addAnimation(RotateAnimation(0f, 360f).apply {
duration = 400
pivotX = view.width / 2f
pivotY = view.height / 2f
})
}
view.startAnimation(set)startAnimation() yöntemi, animasyonu View'ın görüntüleme kuyruğuna ekler. İptal etmek için clearAnimation() kullanın. Önemli: fillAfter=true LayoutParams'i değiştirmez — startAnimation tekrar çağrıldığında, animasyon son görüntülenen durumdan değil, View'ın orijinal durumundan başlar.
View Animation 2026'da dar bir uygulama alanına sahiptir: Property Animation'ın kararsız çalışabileceği Android 4.x (API 16-19) desteği; LayoutParams değişikliği gerektirmeyen basit görünme/kaybolma efektleri; tıklama uyuşmazlığının kritik olmadığı animasyonlar (örneğin, arka plan öğeleri). Diğer tüm durumlarda Google, ObjectAnimator veya AnimatorSet'e geçilmesini önerir.
Android Developers'a göre Property Animation, ara canvas kareleri oluşturmadığı için bellek açısından %15-20 daha verimlidir. View Animation'dan Property Animation'a geçiş, tıklama uyuşmazlığı sorununu da ortadan kaldırır: animasyondan sonra View, yeni konumunda dokunuşları alır.
Sıkça Sorulan Sorular
View Animation yalnızca View'ın görüntülemesini değiştirir — animasyondan sonra View, dokunma olayları için orijinal konumunda kalır. Property Animation nesnenin gerçek özelliklerini değiştirir, LayoutParams'i günceller ve tıklamaları yeni konumda doğru şekilde işler.
Google, Android 3.0'dan (API 11) itibaren View Animation'ı kullanımdan kaldırılmış olarak ilan etti. Nedeni, tıklama uyuşmazlığı (click mismatch) ve rastgele nesne özelliklerini canlandıramamaktır. Property Animation bu sorunları çözer ve tüm yeni projeler için önerilir.
Kullanılabilir ancak önerilmez. TranslateAnimation sonrası bir düğme yeni bir konumda görünecek, ancak tıklamalar orijinal konumda kaydedilecektir. Düğmeler için Property Animation veya Jetpack Compose'da AnimatedVisibility ile composable kullanın.
view.clearAnimation() çağrısı yapın. Animasyon fillAfter=true ile başlatıldıysa, View son durumunda kalacaktır. Orijinal duruma zorla dönmek için clearAnimation() ve invalidate() çağrısı yapın.
Ö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.
Ayrıca okuyun