Bir animasyon kaynağı, iki animasyon türünden birini tanımlayabilir:
- Mülk animasyonu
- Belirli bir dönemde nesnenin özellik değerlerini değiştirerek animasyon oluşturur
Animator
ile. - Animasyonu göster
-
Animasyon görüntüleme çerçevesiyle yapabileceğiniz iki tür animasyon vardır:
- Taze animasyon: Tek bir resimde bir dizi dönüşüm gerçekleştirerek animasyon oluşturur
Animation
ile. - Kare animasyonu: Resimleri sırayla göstererek animasyon oluşturur
AnimationDrawable
ile.
- Taze animasyon: Tek bir resimde bir dizi dönüşüm gerçekleştirerek animasyon oluşturur
Mülk animasyonu
XML'de tanımlanmış ve hedef nesnenin özelliklerini değiştiren bir animasyon. Örneğin: arka plan rengini veya alfa değerini belirli bir süre boyunca değiştirebilirsiniz.
- dosya konumu:
Dosya adı, kaynak kimliği olarak kullanılır.- derlenen kaynak veri türü:
- Kaynak işaretçisi bir
ValueAnimator
,ObjectAnimator
, veyaAnimatorSet
- kaynak referansı:
- .
Java tabanlı veya Kotlin kodunda:
R.animator.filename
XML'de:@[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>
. Şunları yapabilirsiniz: animasyon öğelerini<set>
öğesinin içinde gruplayın (diğer dahil olmak üzere)<set>
öğeleri. - öğeler:
- örnek:
-
res/animator/property_animator.xml
itibarıyla 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 koddaki XML kaynaklarını bir
AnimatorSet
nesnesine şişirin ve ardından tüm animasyonlar için hedef nesneleri ayarlayın. .setTarget()
çağrısı yapıldığında, kolaylık sağlamak amacıylaAnimatorSet
öğesinin tüm alt öğeleri için tek bir hedef nesne ayarlanır. Aşağıdaki kodda bunun nasıl yapılacağı 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 bkz.:
-
- Mülk Animasyonuna Genel Bakış
- Örnekler için API demoları mülk animasyon sisteminin
res/animator/filename.xml
Animasyonu görüntüle
Görüntüleme animasyonu çerçevesi, her ikisi de bildirilen iki kare arası ve kare kare animasyonların her ikisini de destekler oluşturun. Aşağıdaki bölümlerde her iki yöntemin de nasıl kullanılacağı açıklanmaktadır.
9-12 yaş animasyonu
XML'de tanımlanmış ve bir grafik üzerinde döndürme, kaybolma, hareket etme ve esneme.
- dosya konumu:
Dosya adı, kaynak kimliği olarak kullanılır.- derlenen kaynak veri türü:
- Kaynak işaretçisini bir
Animation
- 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:
<alpha>
,<scale>
,<translate>
, Şu öğeyi içeren<rotate>
veya<set>
öğesi diğer animasyon öğelerinin (iç içe yerleştirilmiş<set>
öğeleri dahil) bir grubu (veya grupları). - öğeler:
- örnek:
-
res/anim/hyperspace_jump.xml
itibarıyla 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
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 bkz.:
res/anim/filename.xml
İnterpolatörler
Ara değer, XML'de tanımlanan ve bir öğenin değişim hızını etkileyen, animasyon ekler. Bu, mevcut animasyon efektlerinizin hızlandırılmasını, yavaşlatılmasını, tekrarlanmasını, geri döndü vb.
Ara değer, android:interpolator
içeren animasyon öğesine uygulanır.
özelliğinin değeri.
Android'de kullanılabilen tüm interpolatörler Interpolator
sınıfının alt sınıflarıdır. Her interpolator sınıfı için Android
Bir animasyona interpolator uygulamak için başvurabileceğiniz bir ortak kaynak içerir
(android:interpolator
özelliği) kullanabilirsiniz.
Aşağıdaki tabloda her interpolator için kullanılacak kaynak belirtilmiştir:
İ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 arapolatörler
Platformun sağladığı interpolatörlerden memnun kalmazsanız değiştirilmiş özelliklere sahip özel bir interpolator kaynağı oluşturabilirsiniz.
Örneğin, reklamlarınızın yayınlanma oranını
AnticipateInterpolator
için ivmelenme veya
CycleInterpolator
döngüleri. Bunun için,
XML dosyasında kendi interpolator kaynağınızı oluşturun.
- dosya konumu:
Dosya adı, kaynak kimliği olarak kullanılır.- derlenen kaynak veri türü:
- İlgili interpolator nesnesine yönelik kaynak işaretçisi
- kaynak referansı:
- .
XML'de:
@[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 interpolator'unuz tam olarak Platform tarafından sağlananlar (önceki tabloda listelenenler)
- öğeler:
- Her
Interpolator
uygulamasında, XML'de tanımlandığı şekilde, küçük harfle başlayan bir ada sahiptir. - örnek:
-
res/anim/my_overshoot_interpolator.xml
itibarıyla 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, interpolator'ı 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" />
res/anim/filename.xml
Animasyon karesi
XML olarak tanımlanmış ve film gibi bir dizi resmi gösteren animasyon.
- dosya konumu:
Dosya adı, kaynak kimliği olarak kullanılır.- derlenen kaynak veri türü:
- Kaynak işaretçisini bir
AnimationDrawable
- 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
itibarıyla 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
View
için arka plan olarak ayarlar animasyonu oynatın: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 bkz.:
res/drawable/filename.xml