Animasyonu Görüntüle

Görünümler'de 9-12 arasındaki animasyonlar gerçekleştirmek için görüntüleme animasyon sistemini kullanabilirsiniz. 9-12 yaş animasyonu; başlangıç noktası, bitiş noktası, boyut, döndürme ve animasyonun diğer yaygın özellikleri gibi bilgileri kullanarak animasyonu hesaplar.

9-12 animasyon, View nesnesinin içerikleri üzerinde bir dizi basit dönüşüm (konum, boyut, döndürme ve şeffaflık) gerçekleştirebilir. Dolayısıyla, bir TextView nesneniz varsa 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, bir 9-12 animasyonunda kullanılan tüm sınıfları sağlar.

Animasyon talimatları dizisi, XML veya Android koduyla tanımlanan ara animasyonu tanımlar. Düzen tanımlamada olduğu gibi, animasyonu sabit kodlamaya kıyasla daha okunabilir, 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ştirmelerini istediğiniz dönüşümleri, ne zaman gerçekleşeceklerini ve ne kadar süre içinde uygulanacaklarını tanımlar. Dönüşümler, sıralı veya eşzamanlı olabilir. Örneğin, bir TextView içeriğinin soldan sağa doğru hareket etmesini ve ardından 180 derece döndürmesini sağlayabilir veya metnin aynı anda hareket edip dönmesini sağlayabilirsiniz. Her dönüştürmede, söz konusu dönüşüme özgü 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 bir dizi ortak parametre (ör. başlangıç zamanı ve süre) gerekir. Birkaç dönüşümün aynı anda gerçekleşmesi için bunlara aynı başlangıç zamanı verin. Bunları sıralı hâle getirmek için başlangıç zamanı ile önceki dönüşümün süresini hesaplayın.

Animasyon XML dosyası, Android projenizin res/anim/ dizinine aittir. Dosyanın tek bir kök öğesi olmalıdır: Bu, tek bir <alpha>, <scale>, <translate>, <rotate>, interpolator öğesi veya bu öğelerin gruplarını (başka bir <set> içerebilir) barındıran <set> öğesi olacaktır. Varsayılan olarak, tüm animasyon talimatları aynı anda uygulanır. Bunların sıralı olarak gerçekleşmesi için aşağıdaki örnekte gösterildiği gibi startOffset özelliğini belirtmeniz gerekir.

ApiDemos'ların birinden alınan aşağıdaki XML, bir View nesnesini uzatmak ve 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) şeklindedir ve aşağı ve sağa doğru gidildikçe artar.

PivotX gibi bazı değerler, nesnenin kendisine göre veya üst öğeyle göreli olarak belirtilebilir. İstediğiniz biçimi kullandığınızdan emin olun (üst öğeye göre% 50 için "50" veya kendisine göre %50 için "%50").

Interpolator atayarak dönüşümün zaman içinde nasıl uygulanacağını belirleyebilirsiniz. Android'de çeşitli hız eğrileri belirten birkaç Interpolator alt sınıfı bulunur: Örneğin AccelerateInterpolator, yavaş başlayıp hızlanmak için dönüşüm işlemi 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şvuruda bulunur 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() öğesine alternatif olarak Animation.setStartTime() ile animasyon için bir başlangıç zamanı tanımlayabilir, ardından animasyonu View.setAnimation() ile Görünüm'e atayabilirsiniz.

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ğinden veya yeniden boyutlandırıldığından bağımsız olarak, animasyonunuzu barındıran Görünüm sınırları buna uygun şekilde otomatik olarak ayarlanmaz. Yine de animasyon, Görünüm sınırlarının dışına çıkar ve kırpılmaz. Ancak, animasyon üst Görünümün sınırlarını aşarsa kırpma gerçekleşir.