Görünümler'de ara animasyonlar gerçekleştirmek için görünüm animasyon sistemini kullanabilirsiniz. Ara animasyon, animasyonu başlangıç noktası, bitiş noktası, boyut, döndürme ve animasyonla ilgili diğer yaygın özellikler gibi bilgilerle hesaplar.
Ara animasyon, bir Görünüm nesnesinin içeriklerinde bir dizi basit dönüşüm (konum, boyut, döndürme ve şeffaflık) gerçekleştirebilir. Dolayısıyla, TextView
nesneniz varsa metni taşıyabilir, döndürebilir, büyütebilir veya küçültebilirsiniz. Arka plan resmi varsa arka plan resmi metinle birlikte dönüştürülür. animation package
, tween animasyonunda kullanılan tüm sınıfları sağlar.
Bir animasyon talimatı dizisi, XML veya Android koduyla tanımlanan tween animasyonunu tanımlar. Düzenleme tanımlarken olduğu gibi, animasyonu sabit kodlamadan daha okunaklı, yeniden kullanılabilir ve değiştirilebilir olduğu için XML dosyası önerilir. Aşağıdaki örnekte XML kullanıyoruz. (XML yerine uygulama kodunuzda animasyon tanımlama hakkında daha fazla bilgi edinmek için AnimationSet
sınıfına ve diğer Animation
alt sınıflarına bakın.)
Animasyon talimatları, gerçekleşmesini istediğiniz dönüşümleri, bunların ne zaman gerçekleşeceğini ve uygulanmasının ne kadar süreceğini tanımlar. Dönüşümler sıralı veya eşzamanlı olabilir. Örneğin, bir TextView'nin içeriğini soldan sağa doğru hareket ettirip 180 derece döndürebilir veya metni aynı anda hareket ettirip döndürebilirsiniz. Her dönüşüm, söz konusu dönüşüme özgü bir parametre grubu (boyut değişikliği için başlangıç boyutu ve bitiş boyutu, döndürme için başlangıç açısı ve bitiş açısı vb.) ve ayrıca ortak parametre grubu (ör. başlangıç zamanı ve süre) alır. Birden fazla dönüşümü aynı anda gerçekleştirmek için aynı başlangıç zamanını, sıralı olarak gerçekleştirmek için ise başlangıç zamanına önceki dönüşümün süresini de ekleyerek hesaplama yapın.
Animasyon XML dosyası, Android projenizin res/anim/
dizinine aittir. Dosyada tek bir kök öğe olmalıdır: Bu, tek bir <alpha>
, <scale>
, <translate>
, <rotate>
, ara öğe öğesi veya bu öğelerin gruplarını (başka bir <set>
içerebilir) barındıran bir <set>
öğesi olacaktır. Varsayılan olarak tüm animasyon talimatları aynı anda uygulanır. Bunların sıralı olarak gerçekleşmesini sağlamak için aşağıdaki örnekte gösterildiği gibi startOffset
özelliğini belirtmeniz gerekir.
ApiDemos'lardan birinde bulunan aşağıdaki XML, bir View nesnesini germek ve ardından aynı anda döndürmek için kullanılır.
<set android:shareInterpolator="false"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="1.0" android:toXScale="1.4" android:fromYScale="1.0" android:toYScale="0.6" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="700" /> <set android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" android:fillBefore="false" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" /> </set> </set>
Ekran koordinatları (bu örnekte kullanılmamıştır) sol üst köşede (0,0) olup aşağı ve sağa doğru gittikçe artar.
pivotX gibi bazı değerler, nesneye veya üst öğeye göre belirtilebilir. İstediğiniz değer için doğru biçimi kullandığınızdan emin olun ("50", üst öğeye göre %50 veya "%50", kendi kendisine göre %50).
Bir dönüşümün zaman içinde nasıl uygulanacağını belirlemek için Interpolator
atamanız gerekir. Android, çeşitli hız eğrilerini belirten çeşitli Interpolator alt sınıfları içerir: Örneğin, AccelerateInterpolator
bir dönüşümün yavaş başlayıp hız kazanmasını söyler. Her birinin XML'e uygulanabilecek bir özellik değeri vardır.
Bu XML projenin res/anim/
dizinine hyperspace_jump.xml
olarak kaydedildiğinde aşağıdaki kod buna başvurur ve düzendeki bir ImageView
nesnesine uygular.
Kotlin
AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation -> findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation) }
Java
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage); Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); spaceshipImage.startAnimation(hyperspaceJumpAnimation);
startAnimation()
öğesine alternatif olarak,
ile animasyon için bir başlangıç zamanı tanımlayabilir ve ardından animasyonu Animation.setStartTime()
içeren Görünüme atayabilirsiniz.View.setAnimation()
XML söz dizimi, mevcut etiketler ve özellikler hakkında daha fazla bilgi için Animasyon Kaynakları başlıklı makaleyi inceleyin.
Not: Animasyonunuzun nasıl hareket ettiğine veya yeniden boyutlandırıldığına bakılmaksızın, animasyonunuzu barındıran Görünümün sınırları, animasyonunuza uyum sağlayacak şekilde otomatik olarak ayarlanmaz. Buna rağmen animasyon, Görünüm sınırlarının dışında çizilir ve kırpılmaz. Bununla birlikte, animasyon üst görünümün sınırlarını aşarsa kırpma gerçekleşir.