Görünümlerde tween animasyon 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
nesnenize sahipseniz metni taşıyabilir, döndürebilir, büyütebilir veya küçültebilirsiniz. Arka plan resmi varsa arka plan resmi de metinle birlikte dönüştürülür. animation package
, tween animasyonunda kullanılan tüm sınıfları sağlar.
Bir animasyon talimatları dizisi, XML veya Android kodu ile tanımlanan iki kare arasındaki animasyonu 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ılmaktadır. (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 içeriğinin soldan sağa taşınmasını ve ardından 180 derece döndürülmesini sağlayabilir veya metni aynı anda hem taşıyıp 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. Birkaç dönüşümün aynı anda gerçekleşmesi için bu işlemlere aynı başlangıç zamanını verin. Bunları sıralı hale getirmek için başlangıç zamanı ile bir önceki dönüşümün süresini hesaplayın.
Animasyon XML dosyası, Android projenizin res/anim/
dizininde olmalıdır. Dosyanın tek bir kök öğesi olmalıdır: Bu, tek bir <alpha>
, <scale>
, <translate>
, <rotate>
, ara nokta öğesi veya bu öğelerin gruplarını içeren <set>
öğesi olur (başka bir <set>
içerebilir). Varsayılan olarak tüm animasyon talimatları aynı anda uygulanır. Bunların sırayla gerçekleşmesi için aşağıdaki örnekte gösterildiği gibi startOffset
özelliğini belirtmeniz gerekir.
ApiDemos'tan alınan aşağıdaki XML, bir View nesnesini uzatmak ve ardından aynı anda bir View nesnesini döndürmek ve 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).
Interpolator
atayarak bir dönüşümün zaman içinde nasıl uygulanacağını belirleyebilirsiniz. Android, çeşitli hız eğrileri belirten birçok Interpolator alt sınıfı içerir. Örneğin AccelerateInterpolator
, bir dönüşümün yavaş başlayıp hızlandırmasını söyler. Her birinin XML'e uygulanabilecek bir özellik değeri vardır.
Bu XML, projenin res/anim/
dizininde hyperspace_jump.xml
olarak kaydedilir. Aşağıdaki kod, bu XML'e referans verir 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()
'e alternatif olarak,
ile animasyon için bir başlangıç zamanı tanımlayabilir, ardından Animation.setStartTime()
ile animasyonu Görünümün görünümüne atayabilirsiniz.View.setAnimation()
XML söz dizimi, kullanılabilir etiketler ve özellikler hakkında daha fazla bilgi için Animasyon Kaynakları'na bakın.
Not: Animasyonunuzun nasıl hareket edebileceğinden veya yeniden boyutlandırıldığından bağımsız olarak, animasyonunuzu barındıran Görünümün sınırları animasyona uygun olacak şekilde otomatik olarak ayarlanmaz. Buna rağmen animasyon, Görünümün sınırlarının dışında çizilmeye devam eder ve kırpılmaz. Ancak animasyon, üst görünümün sınırlarını aşarsa kırpma olur.