Görünümlerde ara animasyon gerçekleştirmek için görünüm animasyonu sistemini kullanabilirsiniz. Tween animasyonu, başlangıç noktası, bitiş noktası, boyut, döndürme ve animasyonun diğer yaygın yönleri gibi bilgilerle animasyonu hesaplar.
Tween animasyonu, bir View nesnesinin içeriğinde bir dizi basit dönüşüm (konum, boyut, döndürme ve şeffaflık) gerçekleştirebilir. Bu nedenle, 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, ara animasyonda kullanılan tüm sınıfları sağlar.
Tween animasyonu, XML veya Android koduyla tanımlanan bir animasyon talimatları dizisiyle tanımlanır. Düzen tanımlamada olduğu gibi, animasyonu sabit kodlamak yerine daha okunabilir, yeniden kullanılabilir ve değiştirilebilir olduğu için XML dosyası kullanılması ö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 uygulanmalarının ne kadar süreceğini tanımlar. Dönüşümler sıralı veya eş zamanlı olabilir. Örneğin, bir TextView'in içeriğinin soldan sağa hareket etmesini ve ardından 180 derece dönmesini sağlayabilir ya da metnin aynı anda hareket etmesini ve dönmesini sağlayabilirsiniz. Her dönüşüm için, o dönüşüme özel bir dizi parametre (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 ortak bir dizi parametre (örneğin, başlangıç zamanı ve süre) gerekir. Birden fazla dönüşümün aynı anda gerçekleşmesini sağlamak için aynı başlangıç zamanını verin. Sırayla gerçekleşmesini sağlamak için başlangıç zamanını önceki dönüşümün süresiyle birlikte hesaplayın.
Animasyon XML dosyası, Android projenizin res/anim/ dizininde yer alır. Dosyada tek bir kök öğe olmalıdır: Bu, tek bir <alpha>, <scale>, <translate>, <rotate>, interpolator öğesi veya bu öğe gruplarını (başka bir <set> içerebilir) barındıran <set> öğesi olabilir. Varsayılan olarak, tüm animasyon talimatları aynı anda uygulanır. Bunların sırayla gerçekleşmesini sağlamak için aşağıdaki örnekte gösterildiği gibi startOffset özelliğini belirtmeniz gerekir.
ApiDemos'taki aşağıdaki XML, bir View nesnesini önce genişletmek, ardından aynı anda 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) değerini alır ve aşağıya ve sağa doğru gidildikçe artar.
pivotX gibi bazı değerler, nesnenin kendisine veya üst öğeye göre belirtilebilir. İstediğiniz değer için doğru biçimi kullandığınızdan emin olun ("50" değeri, üst öğeye göre% 50 anlamına gelir; "50%" değeri ise kendisine göre% 50 anlamına gelir).
Interpolator atayarak bir dönüşümün zaman içinde nasıl uygulanacağını belirleyebilirsiniz. Android'de çeşitli hız eğrilerini belirten birkaç Interpolator alt sınıfı bulunur. Örneğin, AccelerateInterpolator
bir dönüşümün yavaş başlayıp hızlanmasını sağlar. Her birinin, XML'de uygulanabilecek bir özellik değeri vardır.
Bu XML, projenin res/anim/ dizininde hyperspace_jump.xml olarak kaydedildiğinde aşağıdaki kod, bu XML'ye referans verir ve bunu 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() yerine, ile animasyon için başlangıç zamanı tanımlayabilir, ardından Animation.setStartTime() ile animasyonu Görünüm'e 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 ettiğine veya yeniden boyutlandırıldığına bakılmaksızın, animasyonunuzu içeren görünümün sınırları, animasyonunuza uyacak şekilde otomatik olarak ayarlanmaz. Buna rağmen animasyon, görünümünü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 gerçekleşir.