Bir animasyon kaynağı, iki animasyon türünden birini tanımlayabilir:
- Mülk animasyonu
Animator
ile ayarlanan bir dönem boyunca nesnenin özellik değerlerini değiştirerek animasyon oluşturur.- Animasyonu görüntüle
-
Animasyon görüntüleme çerçevesiyle yapabileceğiniz iki tür animasyon vardır:
- İki ara animasyon:
Animation
ile tek bir resim üzerinde bir dizi dönüşüm gerçekleştirerek animasyon oluşturur. - Kare animasyonu: Resim dizisini
AnimationDrawable
ile sırayla göstererek bir animasyon oluşturur.
- İki ara animasyon:
Tesis animasyonu
Belirli bir süre boyunca hedef nesnenin özelliklerini (arka plan rengi veya alfa değeri gibi) değiştiren, XML'de tanımlanan animasyon.
- dosya konumu:
res/animator/filename.xml
Dosya adı, kaynak kimliği olarak kullanılır.- derlenmiş kaynak veri türü:
ValueAnimator
,ObjectAnimator
veyaAnimatorSet
öğesine kaynak işaretçisi- kaynak referansı:
-
Java tabanlı veya Kotlin kodunda:
R.animator.filename
XML:@[package:]animator/filename
- söz dizimi:
-
<set android:ordering=["together" | "sequentially"]> <objectAnimator android:propertyName="string" android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["restart" | "reverse"] android:valueType=["intType" | "floatType"]/> <animator android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["restart" | "reverse"] android:valueType=["intType" | "floatType"]/> <set> ... </set> </set>
Dosyanın tek bir kök öğesi olmalıdır:
<set>
,<objectAnimator>
veya<valueAnimator>
. Animasyon öğelerini, diğer<set>
öğeleri de dahil olmak üzere<set>
öğesinin içinde gruplandırabilirsiniz. - öğeler:
- örnek:
-
res/animator/property_animator.xml
konumuna kaydedilen XML dosyası:<set android:ordering="sequentially"> <set> <objectAnimator android:propertyName="x" android:duration="500" android:valueTo="400" android:valueType="intType"/> <objectAnimator android:propertyName="y" android:duration="500" android:valueTo="300" android:valueType="intType"/> </set> <objectAnimator android:propertyName="alpha" android:duration="500" android:valueTo="1f"/> </set>
Bu animasyonu çalıştırmak için kodunuzdaki XML kaynaklarını bir
AnimatorSet
nesnesi olacak şekilde şişirin ve ardından animasyon grubunu başlatmadan önce tüm animasyonlar için hedef nesneleri ayarlayın.setTarget()
işlevinin çağrılması, kolaylık sağlamak amacıyla tümAnimatorSet
alt öğeleri için tek bir hedef nesne ayarlar. Bunun nasıl yapılacağı aşağıdaki kodda gösterilmektedir:Kotlin
val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator) .apply { setTarget(myObject) start() }
Java
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.animator.property_animator); set.setTarget(myObject); set.start();
- ayrıca bakın:
-
- Mülk Animasyonuna Genel Bakış
- Tesis animasyon sisteminin nasıl kullanılacağıyla ilgili örnekler için API demoları
Animasyonu görüntüle
Görüntüleme animasyonu çerçevesi, her ikisi de XML'de tanımlanan 3-12 kare animasyonları destekler. Aşağıdaki bölümlerde, her iki yöntemin nasıl kullanılacağı açıklanmaktadır.
8-12 yaş animasyonu
Bir grafik üzerinde döndürme, solma, hareket etme ve esneme gibi geçişler gerçekleştiren, XML'de tanımlanan animasyon.
- dosya konumu:
res/anim/filename.xml
Dosya adı, kaynak kimliği olarak kullanılır.- derlenmiş kaynak veri türü:
Animation
öğesine kaynak işaretçisi- kaynak referansı:
-
Java'da:
R.anim.filename
XML'de:@[package:]anim/filename
- söz dizimi:
-
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@[package:]anim/interpolator_resource" android:shareInterpolator=["true" | "false"] > <alpha android:fromAlpha="float" android:toAlpha="float" /> <scale android:fromXScale="float" android:toXScale="float" android:fromYScale="float" android:toYScale="float" android:pivotX="float" android:pivotY="float" /> <translate android:fromXDelta="float" android:toXDelta="float" android:fromYDelta="float" android:toYDelta="float" /> <rotate android:fromDegrees="float" android:toDegrees="float" android:pivotX="float" android:pivotY="float" /> <set> ... </set> </set>
Dosyanın tek bir kök öğesi olmalıdır: Diğer animasyon öğelerinin (iç içe yerleştirilmiş
<set>
öğeleri dahil) bir grubunu (veya gruplarını) barındıran<alpha>
,<scale>
,<translate>
,<rotate>
ya da<set>
öğesi. - öğeler:
- örnek:
-
res/anim/hyperspace_jump.xml
konumuna kaydedilen XML dosyası:<set xmlns:android="http://schemas.android.com/apk/res/android" 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/accelerate_interpolator" android:startOffset="700"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:duration="400" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:duration="400" /> </set> </set>
Aşağıdaki uygulama kodu, animasyonu bir
ImageView
öğesine uygular ve animasyonu başlatır:Kotlin
val image: ImageView = findViewById(R.id.image) val hyperspaceJump: Animation = AnimationUtils.
loadAnimation
(this, R.anim.hyperspace_jump) image.startAnimation
(hyperspaceJump)Java
ImageView image = (ImageView) findViewById(R.id.image); Animation hyperspaceJump = AnimationUtils.
loadAnimation
(this, R.anim.hyperspace_jump); image.startAnimation
(hyperspaceJump); - ayrıca bakın:
İnterpolatörler
İnterpolatör, XML'de tanımlanan ve bir animasyondaki değişiklik hızını etkileyen animasyon düzenleyicidir. Bu, mevcut animasyon efektlerinizin hızlandırılmasını, yavaşlatılmasını, tekrarlanmasını, geri alınmasını vb. sağlar.
android:interpolator
özelliğine sahip bir animasyon öğesine interpolatör uygulanır. Bu özelliğin değeri, interpolatör kaynağına başvurudur.
Android'de kullanılabilen tüm interpolatörler Interpolator
sınıfının alt sınıflarıdır. Android, her interpolatör sınıfı için android:interpolator
özelliğini kullanarak bir animasyona interpolatör uygulamak üzere referans verebileceğiniz bir herkese açık kaynak içerir.
Aşağıdaki tabloda her bir interpolatör için kullanılacak kaynak belirtilmektedir:
İnterpolatör sınıfı | Kaynak Kimliği |
---|---|
AccelerateDecelerateInterpolator |
@android:anim/accelerate_decelerate_interpolator |
AccelerateInterpolator |
@android:anim/accelerate_interpolator |
AnticipateInterpolator |
@android:anim/anticipate_interpolator |
AnticipateOvershootInterpolator |
@android:anim/anticipate_overshoot_interpolator |
BounceInterpolator |
@android:anim/bounce_interpolator |
CycleInterpolator |
@android:anim/cycle_interpolator |
DecelerateInterpolator |
@android:anim/decelerate_interpolator |
LinearInterpolator |
@android:anim/linear_interpolator |
OvershootInterpolator |
@android:anim/overshoot_interpolator |
Bunlardan birini android:interpolator
özelliğiyle nasıl uygulayabileceğiniz aşağıda açıklanmıştır:
<set android:interpolator="@android:anim/accelerate_interpolator"> ... </set>
Özel interpolatörler
Platformun sağladığı interpolatörlerden memnun değilseniz değiştirilmiş özelliklere sahip özel bir interpolatör kaynağı oluşturabilirsiniz.
Örneğin, AnticipateInterpolator
için hızlanma hızını veya CycleInterpolator
için devir sayısını ayarlayabilirsiniz. Bunun için XML dosyasında kendi interpolatör kaynağınızı oluşturursunuz.
- dosya konumu:
res/anim/filename.xml
Dosya adı, kaynak kimliği olarak kullanılır.- derlenmiş kaynak veri türü:
- İlgili interpolatör nesnesine kaynak işaretçisi
- kaynak referansı:
-
XML olarak:
@[package:]anim/filename
- söz dizimi:
-
<?xml version="1.0" encoding="utf-8"?> <InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android" android:attribute_name="value" />
Herhangi bir özellik uygulamazsanız interpolatörünüz, önceki tabloda listelenen platform tarafından sağlananlarla tam olarak aynı şekilde çalışır.
- öğeler:
- XML'de tanımlandığında her
Interpolator
uygulamasının, küçük harfle başlayan bir adı olduğuna dikkat edin. - örnek:
-
res/anim/my_overshoot_interpolator.xml
konumuna kaydedilen XML dosyası:<?xml version="1.0" encoding="utf-8"?> <overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:tension="7.0" />
Bu animasyon XML'i interpolatörü uygular:
<scale xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@anim/my_overshoot_interpolator" android:fromXScale="1.0" android:toXScale="3.0" android:fromYScale="1.0" android:toYScale="3.0" android:pivotX="50%" android:pivotY="50%" android:duration="700" />
Kare animasyonu
XML'de tanımlanan ve sırayla resim dizisi gösteren (ör. film) animasyon.
- dosya konumu:
res/drawable/filename.xml
Dosya adı, kaynak kimliği olarak kullanılır.- derlenmiş kaynak veri türü:
AnimationDrawable
öğesine kaynak işaretçisi- kaynak referansı:
-
Java'da:
R.drawable.filename
XML'de:@[package:]drawable.filename
- söz dizimi:
-
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot=["true" | "false"] > <item android:drawable="@[package:]drawable/drawable_resource_name" android:duration="integer" /> </animation-list>
- öğeler:
- örnek:
-
res/drawable/rocket_thrust.xml
konumuna kaydedilen XML dosyası:<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/rocket_thrust1" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust2" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust3" android:duration="200" /> </animation-list>
Aşağıdaki uygulama kodu, animasyonu bir
View
için arka plan olarak ayarlar ve ardından animasyonu oynatır:Kotlin
val rocketImage: ImageView = findViewById(R.id.rocket_image) rocketImage.
setBackgroundResource
(R.drawable.rocket_thrust) val rocketAnimation = rocketImage.background
if (rocketAnimation isAnimatable
) { rocketAnimation.start()
}Java
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image); rocketImage.
setBackgroundResource
(R.drawable.rocket_thrust); rocketAnimation = rocketImage.getBackground()
; if (rocketAnimation instanceofAnimatable
) { ((Animatable)rocketAnimation).start()
; } - ayrıca bakın: