Android'in geçiş çerçevesi, başlangıç ve bitiş düzenlerini sağlayarak kullanıcı arayüzünüzdeki her türlü hareketi canlandırmanızı sağlar. Ne tür bir animasyon istediğinizi (ör. görünümlerin azaltılıp azaltılmasını veya görünüm boyutlarını değiştirmek) seçebilirsiniz. Geçiş çerçevesi, başlangıç düzeninden bitiş düzenine kadar animasyonun nasıl yapılacağını belirler.
Geçiş çerçevesi aşağıdaki özellikleri içerir:
- Grup düzeyinde animasyonlar: Animasyon efektlerini bir görünüm hiyerarşisindeki tüm görünümlere uygular.
- Yerleşik animasyonlar: Kararma veya hareket gibi yaygın efektler için önceden tanımlanmış animasyonları kullanın.
- Kaynak dosyası desteği: Düzen kaynak dosyalarından yükleme görünümü hiyerarşileri ve yerleşik animasyonlar.
- Yaşam döngüsü geri çağırmaları: Animasyon ve hiyerarşi değişikliği süreci üzerinde kontrol sağlayan geri çağırmalar alın.
Düzen değişiklikleri arasında animasyon yapan örnek kod için BasicTransition bölümüne bakın.
İki düzen arasında animasyon oluşturmak için temel süreç aşağıdaki gibidir:
- Başlangıç ve bitiş düzenleri için bir
Scene
nesnesi oluşturun. Bununla birlikte, başlangıç düzeninin sahnesi genellikle geçerli düzene göre otomatik olarak belirlenir. - İstediğiniz animasyon türünü tanımlamak için bir
Transition
nesnesi oluşturun. TransitionManager.go()
çağrısı yapılır ve sistem, düzenleri değiştirmek için animasyonu çalıştırır.
Şekil 1'deki şemada düzenleriniz, sahneler, geçiş ve son animasyon arasındaki ilişki gösterilmektedir.
Sahne oluşturma
Sahneler, tüm görünümleri ve özellik değerleri dahil olmak üzere bir görünüm hiyerarşisinin durumunu depolar. Geçiş çerçevesi, başlangıç ve bitiş sahneleri arasında animasyonlar çalıştırabilir.
Sahnelerinizi bir düzen kaynak dosyasından veya kodunuzdaki bir görünüm grubundan oluşturabilirsiniz. Ancak geçişinizin başlangıç sahnesi genellikle geçerli kullanıcı arayüzünden otomatik olarak belirlenir.
Bir sahne, bir sahne değişikliği yaptığınızda yürütülen kendi işlemlerini de tanımlayabilir. Bu özellik, bir sahneye geçiş yaptıktan sonra görünüm ayarlarını temizlemek için kullanışlıdır.
Düzen kaynağından sahne oluşturma
Doğrudan bir düzen kaynak dosyasından Scene
örneği oluşturabilirsiniz. Dosyadaki görünüm hiyerarşisi çoğunlukla statik olduğunda bu tekniği kullanın.
Ortaya çıkan sahne, görünüm hiyerarşisinin Scene
örneğini oluşturduğunuz sıradaki durumunu temsil eder. Görünüm hiyerarşisini değiştirirseniz
sahneyi yeniden oluşturun. Çerçeve, dosyadaki tüm görünüm
hiyerarşisinden sahne oluşturur. Bir düzen dosyasının parçasından sahne oluşturamazsınız.
Bir düzen kaynak dosyasından Scene
örneği oluşturmak için düzeninizden sahne kökünü ViewGroup
olarak alın. Ardından, sahne kökü ve sahnenin görünüm hiyerarşisini içeren düzen dosyasının kaynak kimliğiyle birlikte Scene.getSceneForLayout()
işlevini çağırın.
Sahne düzenlerini tanımlayın
Bu bölümün geri kalanındaki kod snippet'leri, aynı sahne kök öğesine sahip iki farklı sahnenin nasıl oluşturulacağını göstermektedir. Snippet'ler, birbirleriyle ilişkili olduklarını ima etmeden birden fazla alakasız Scene
nesnesi yükleyebileceğinizi de gösterir.
Örnek, aşağıdaki düzen tanımlarından oluşur:
- Metin etiketi ve alt öğesi
FrameLayout
olan bir etkinliğin ana düzeni. - İki metin alanı içeren ilk sahne için bir
ConstraintLayout
. - İkinci sahne için aynı iki metin alanının farklı sırada yer aldığı bir
ConstraintLayout
.
Örnek, animasyonun tamamının etkinliğin ana düzeninin alt düzeninde gerçekleşecek şekilde tasarlanmıştır. Ana düzendeki metin etiketi statik kalır.
Etkinliğin ana düzeni şu şekilde tanımlanır:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/master_layout"> <TextView android:id="@+id/title" ... android:text="Title"/> <FrameLayout android:id="@+id/scene_root"> <include layout="@layout/a_scene" /> </FrameLayout> </LinearLayout>
Bu düzen tanımı, bir metin alanı ve sahne kökü için bir alt FrameLayout
içerir. İlk sahnenin düzeni, ana düzen dosyasına eklenir.
Bu sayede uygulama, çerçeveyi bir sahneye yalnızca düzen dosyasının tamamını yükleyebileceğinden bu resim, ilk kullanıcı arayüzünün bir parçası olarak görüntüleyebilir ve aynı zamanda bunu bir sahneye yükleyebilir.
İlk sahnenin düzeni şu şekilde tanımlanır:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/scene_container" android:layout_width="match_parent" android:layout_height="match_parent" ></androidx.constraintlayout.widget.ConstraintLayout>
İkinci sahnenin düzeni, aynı kimliklerle farklı bir sırada düzenlenmiş aynı iki metin alanını içerir. Aşağıdaki şekilde tanımlanır:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/scene_container" android:layout_width="match_parent" android:layout_height="match_parent" ></androidx.constraintlayout.widget.ConstraintLayout>
Düzenlerden sahne oluştur
İki kısıtlama düzeninin tanımlarını oluşturduktan sonra, her biri için bir sahne oluşturabilirsiniz. Bu, iki kullanıcı arayüzü yapılandırması arasında geçiş yapmanızı sağlar. Bir sahneyi almak için sahne köküne ve düzen kaynak kimliğine referans vermeniz gerekir.
Aşağıdaki kod snippet'i, sahne köküne referansın nasıl alınacağını ve düzen dosyalarından iki Scene
nesnesinin nasıl oluşturulduğunu gösterir:
Kotlin
val sceneRoot: ViewGroup = findViewById(R.id.scene_root) val aScene: Scene = Scene.getSceneForLayout(sceneRoot, R.layout.a_scene, this) val anotherScene: Scene = Scene.getSceneForLayout(sceneRoot, R.layout.another_scene, this)
Java
Scene aScene; Scene anotherScene; // Create the scene root for the scenes in this app. sceneRoot = (ViewGroup) findViewById(R.id.scene_root); // Create the scenes. aScene = Scene.getSceneForLayout(sceneRoot, R.layout.a_scene, this); anotherScene = Scene.getSceneForLayout(sceneRoot, R.layout.another_scene, this);
Uygulamada artık görünüm hiyerarşilerine dayalı iki Scene
nesnesi var. Her iki sahne de res/layout/activity_main.xml
içindeki FrameLayout
öğesi tarafından tanımlanan sahne kökünü kullanır.
Kodunuzda bir sahne oluşturma
Ayrıca, kodunuzda bir ViewGroup
nesnesinden Scene
örneği oluşturabilirsiniz. Bu tekniği, görünüm hiyerarşilerini doğrudan kodunuzda değiştirirken veya dinamik olarak oluştururken kullanın.
Kodunuzdaki bir görünüm hiyerarşisinden sahne oluşturmak için Scene(sceneRoot, viewHierarchy)
oluşturucuyu kullanın. Bu oluşturucuyu çağırmak, bir düzen dosyasını zaten şişirmişseniz Scene.getSceneForLayout()
işlevini çağırmaya eşdeğerdir.
Aşağıdaki kod snippet'i, sahne kök öğesinden ve kodunuzdaki sahne için görünüm hiyerarşisinden nasıl Scene
örneği oluşturacağınızı gösterir:
Kotlin
val sceneRoot = someLayoutElement as ViewGroup val viewHierarchy = someOtherLayoutElement as ViewGroup val scene: Scene = Scene(sceneRoot, viewHierarchy)
Java
Scene mScene; // Obtain the scene root element. sceneRoot = (ViewGroup) someLayoutElement; // Obtain the view hierarchy to add as a child of // the scene root when this scene is entered. viewHierarchy = (ViewGroup) someOtherLayoutElement; // Create a scene. mScene = new Scene(sceneRoot, mViewHierarchy);
Sahne işlemleri oluşturun
Çerçeve, sistemin bir sahneye girerken veya sahneden çıkarken çalıştıracağı özel sahne eylemleri tanımlamanızı sağlar. Çerçeve, sahneler arasındaki değişikliği otomatik olarak canlandırdığı için çoğu durumda özel sahne eylemlerini tanımlamak gerekli değildir.
Sahne işlemleri, şu durumları ele almak için yararlıdır:
- Aynı hiyerarşide olmayan görünümlere animasyon eklemek için. Çıkış ve giriş sahnesi işlemlerini kullanarak başlangıç ve bitiş sahneleri için görünümleri canlandırabilirsiniz.
- Geçiş çerçevesinin otomatik olarak canlandırılamayacağı görünümleri (ör.
ListView
nesneleri) canlandırmak için. Daha fazla bilgi edinmek için sınırlamalar ile ilgili bölümü inceleyin.
Özel sahne işlemleri sağlamak için işlemlerinizi Runnable
nesneleri olarak tanımlayın ve Scene.setExitAction()
veya Scene.setEnterAction()
işlevlerine iletin. Çerçeve, geçiş animasyonunu çalıştırmadan önce başlangıç sahnesinde setExitAction()
işlevini, geçiş animasyonunu çalıştırdıktan sonra bitiş sahnesinde setEnterAction()
işlevini çağırır.
Geçiş uygulama
Geçiş çerçevesi, Transition
nesnesi bulunan sahneler arasındaki animasyonun stilini temsil eder. AutoTransition
ve Fade
gibi yerleşik alt sınıfları kullanarak bir Transition
örneği oluşturabilir veya kendi geçişinizi tanımlayabilirsiniz.
Daha sonra, son Scene
ve Transition
öğesini TransitionManager.go()
öğesine geçirerek sahneler arasında animasyonu çalıştırabilirsiniz.
Geçiş yaşam döngüsü, etkinlik yaşam döngüsüne benzerdir ve çerçevenin bir animasyonun başlangıcı ile tamamlanması arasında izlediği geçiş durumlarını temsil eder. Önemli yaşam döngüsü durumlarında çerçeve, kullanıcı arayüzünüzü geçişin farklı aşamalarında ayarlamak için uygulayabileceğiniz geri çağırma işlevlerini çağırır.
Geçiş oluşturma
Önceki bölümde, farklı görünüm hiyerarşilerinin durumunu temsil eden sahnelerin nasıl oluşturulacağı gösterilmektedir. Geçiş yapmak istediğiniz başlangıç ve bitiş sahnelerini tanımladıktan sonra animasyonu tanımlayan bir Transition
nesnesi oluşturun.
Çerçeve, bir kaynak dosyasında yerleşik bir geçiş belirtmenizi ve bunu kodunuzda artırmanızı veya doğrudan kodunuzda yerleşik bir geçiş örneği oluşturmanızı sağlar.
Sınıf | Etiketle | Etki |
---|---|---|
AutoTransition |
<autoTransition/> |
Varsayılan geçiş. Bu sırada soluklaşır, hareket eder, yeniden boyutlandırılır ve görünümlerde soluklaşır. |
ChangeBounds |
<changeBounds/> |
Görünümleri taşır ve yeniden boyutlandırır. |
ChangeClipBounds |
<changeClipBounds/> |
Sahne değişikliğinden önceki ve sonraki View.getClipBounds() görüntüsünü yakalar ve geçiş sırasında bu değişiklikleri canlandırır. |
ChangeImageTransform |
<changeImageTransform/> |
Sahne değişiminden önceki ve sonraki ImageView matrisini yakalar ve geçiş sırasında animasyon oluşturur. |
ChangeScroll |
<changeScroll/> |
Sahne değişikliğinden önceki ve sonraki hedeflerin kaydırma özelliklerini yakalar ve tüm değişiklikleri canlandırır. |
ChangeTransform |
<changeTransform/> |
Sahne değişiminden önceki ve sonraki görünümlerin ölçeğini ve dönüşünü yakalar ve geçiş sırasında bu değişiklikleri canlandırır. |
Explode |
<explode/> |
Başlangıç ve bitiş sahnelerindeki hedef görünümlerin görünürlüğünde yapılan değişiklikleri izler ve görünümleri sahnenin kenarlarına veya kenarlarına taşır. |
Fade |
<fade/> |
fade_in , görüntülemelerde yavaşça gözden geçirilir.fade_out , görünümleri kademeli olarak azaltır.fade_in_out (varsayılan), fade_out ve ardından bir fade_in yapar.
|
Slide |
<slide/> |
Başlangıç ve bitiş sahnelerindeki hedef görünümlerin görünürlüğünde yapılan değişiklikleri izler ve görüntülemeleri sahnenin kenarlarından birinin içine veya dışına taşır. |
Kaynak dosyadan geçiş örneği oluşturma
Bu teknik, etkinliğinizin kodunu değiştirmeden geçiş tanımınızı değiştirmenizi sağlar. Bu teknik, birden fazla geçişi belirtme bölümünde gösterildiği gibi karmaşık geçiş tanımlarını uygulama kodunuzdan ayırmak için de faydalıdır.
Bir kaynak dosyasında yerleşik bir geçiş belirtmek için şu adımları uygulayın:
res/transition/
dizinini projenize ekleyin.- Bu dizin içinde yeni bir XML kaynak dosyası oluşturun.
- Yerleşik geçişlerden biri için XML düğümü ekleyin.
Örneğin, aşağıdaki kaynak dosyası Fade
geçişini belirtir:
<fade xmlns:android="http://schemas.android.com/apk/res/android" />
Aşağıdaki kod snippet'i, bir kaynak dosyasından etkinliğinizin içindeki bir Transition
örneğini nasıl şişireceğinizi gösterir:
Kotlin
var fadeTransition: Transition = TransitionInflater.from(this) .inflateTransition(R.transition.fade_transition)
Java
Transition fadeTransition = TransitionInflater.from(this). inflateTransition(R.transition.fade_transition);
Kodunuzda bir geçiş örneği oluşturma
Bu teknik, kodunuzdaki kullanıcı arayüzünü değiştirirseniz ve çok az parametreyle ya da hiç parametreyle basit yerleşik geçiş örnekleri oluşturursanız geçiş nesnelerini dinamik olarak oluşturmak için yararlıdır.
Yerleşik geçiş örneği oluşturmak için Transition
sınıfının alt sınıflarındaki genel kuruculardan birini çağırın. Örneğin, aşağıdaki kod snippet'i Fade
geçişinin bir örneğini oluşturur:
Kotlin
var fadeTransition: Transition = Fade()
Java
Transition fadeTransition = new Fade();
Geçiş uygulama
Genellikle kullanıcı işlemi gibi bir etkinliğe yanıt olarak farklı görünüm hiyerarşileri arasında geçiş yapmak için bir geçiş uygularsınız. Örneğin, bir arama uygulaması düşünelim: Kullanıcı bir arama terimi girip arama düğmesine dokunduğunda uygulama, arama düğmesini soluklaştıran ve arama sonuçlarında çıkan bir geçiş uygularken sonuç düzenini temsil eden bir sahneye dönüşür.
Etkinliğinizdeki bir etkinliğe yanıt olarak geçiş uygularken sahne değişikliği yapmak istiyorsanız aşağıdaki snippet'te gösterildiği gibi bitiş sahnesiyle birlikte TransitionManager.go()
sınıf işlevini ve animasyon için kullanılacak geçiş örneğini çağırın:
Kotlin
TransitionManager.go(endingScene, fadeTransition)
Java
TransitionManager.go(endingScene, fadeTransition);
Çerçeve, geçiş örneği tarafından belirtilen animasyonu çalıştırırken bitiş sahnesindeki görünüm hiyerarşisiyle sahne kökü içindeki görünüm hiyerarşisini değiştirir. Başlangıç sahnesi, son geçişteki bitiş sahnesidir. Daha önce bir geçiş yoksa başlangıç sahnesi, kullanıcı arayüzünün geçerli durumundan otomatik olarak belirlenir.
Bir geçiş örneği belirtmezseniz geçiş yöneticisi, çoğu durum için makul bir işlem yapan otomatik bir geçiş uygulayabilir. Daha fazla bilgi için TransitionManager
sınıfının API referansına bakın.
Belirli hedef görünümleri seçin
Çerçeve, geçişleri varsayılan olarak başlangıç ve bitiş sahnelerindeki tüm görünümlere uygular. Bazı durumlarda, bir sahnedeki görünümlerin yalnızca bir alt kümesine animasyon uygulamak isteyebilirsiniz. Çerçeve, animasyon eklemek istediğiniz belirli
görünümleri seçmenize olanak tanır. Örneğin, çerçeve ListView
nesnelerinde animasyon oluşturmayı desteklemez. Bu nedenle, geçiş sırasında bunları animasyona dahil etmeye çalışmayın.
Geçişin animasyon gösterdiği her görünüme hedef adı verilir. Yalnızca bir sahneyle ilişkilendirilmiş görünüm hiyerarşisinin parçası olan hedefleri seçebilirsiniz.
Bir veya daha fazla görünümü hedef listesinden kaldırmak için geçişi başlatmadan önce removeTarget()
yöntemini çağırın. Yalnızca belirttiğiniz görünümleri hedef listesine eklemek için addTarget()
işlevini çağırın. Daha fazla bilgi için Transition
sınıfının API referansına bakın.
Birden fazla geçiş belirtme
Bir animasyondan en yüksek etkiyi elde etmek için animasyonu, sahneler arasında gerçekleşen değişiklik türüyle eşleştirin. Örneğin, sahneler arasına bazı görünümleri kaldırıyor ve başka öğeler ekliyorsanız animasyonda kaybolma veya şeffaflaşma, bazı görünümlerin artık kullanılamadığına dair fark edilir bir işaret sağlar. Görünümleri ekrandaki farklı noktalara taşıyorsanız kullanıcıların görüntülemelerin yeni konumunu fark etmeleri için hareketi canlandırmak daha iyi olur.
Geçişler çerçevesi, bağımsız veya özel geçişlerden oluşan bir grup içeren geçiş kümelerinde animasyon efektlerini birleştirmenize olanak tanıdığından yalnızca bir animasyon seçmeniz gerekmez.
XML'deki bir geçiş koleksiyonundan bir geçiş grubu tanımlamak için res/transitions/
dizininde bir kaynak dosyası oluşturun ve geçişleri TransitionSet
öğesi altında listeleyin. Örneğin, aşağıdaki snippet, AutoTransition
sınıfıyla aynı davranışa sahip bir geçiş grubunun nasıl belirtileceğini gösterir:
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android" android:transitionOrdering="sequential"> <fade android:fadingMode="fade_out" /> <changeBounds /> <fade android:fadingMode="fade_in" /> </transitionSet>
Kodunuzda TransitionSet
nesnesine ayarlanan geçişi artırmak için etkinliğinizde TransitionInflater.from()
işlevini çağırın. TransitionSet
sınıfı Transition
sınıfını kapsar. Dolayısıyla bu sınıfı, diğer Transition
örneklerinde olduğu gibi bir geçiş yöneticisiyle kullanabilirsiniz.
Sahne olmadan geçiş uygula
Görünüm hiyerarşilerini değiştirmek, kullanıcı arayüzünüzde değişiklik yapmanın tek yolu değildir. Ayrıca, geçerli hiyerarşiye alt görünümler ekleyerek, bunları değiştirerek ve kaldırarak da değişiklik yapabilirsiniz.
Örneğin, tek bir düzenle bir arama
etkileşimi uygulayabilirsiniz. Arama girişi alanı ve arama simgesi bulunan düzenle başlayın. Sonuçları gösterecek şekilde kullanıcı arayüzünü değiştirmek istiyorsanız kullanıcı dokunduğunda ViewGroup.removeView()
işlevini çağırarak arama düğmesini kaldırın ve ViewGroup.addView()
işlevini çağırarak arama sonuçlarını ekleyin.
Alternatif olarak, neredeyse aynı iki hiyerarşiye sahip olmak istiyorsanız bu yaklaşımı kullanabilirsiniz. Kullanıcı arayüzünde küçük bir farklılık için iki ayrı düzen dosyası oluşturup yönetmek yerine, kodda değiştirdiğiniz bir görünüm hiyerarşisini içeren bir düzen dosyanız olabilir.
Geçerli görünüm hiyerarşisinde bu şekilde değişiklik yaparsanız sahne oluşturmanız gerekmez. Bunun yerine, gecikmeli geçiş kullanarak bir görünüm hiyerarşisinin iki durumu arasında bir geçiş oluşturabilir ve uygulayabilirsiniz. Geçişler çerçevesinin bu özelliği mevcut görünüm hiyerarşisi durumuyla başlar, görünümlerinde yaptığınız değişiklikleri kaydeder ve sistem kullanıcı arayüzünü yeniden çizdiğinde değişiklikleri canlandıran bir geçiş uygular.
Tek görünüm hiyerarşisinde gecikmeli geçiş oluşturmak için aşağıdaki adımları izleyin:
- Geçişi tetikleyen etkinlik gerçekleştiğinde, değiştirmek istediğiniz tüm görünümlerin ve kullanılacak geçişin üst görünümünü sağlayarak
TransitionManager.beginDelayedTransition()
işlevini çağırın. Çerçeve, alt görünümlerin mevcut durumunu ve mülk değerlerini depolar. - Alt görünümlerde, kullanım alanınızın gerektirdiği değişiklikleri yapın. Çerçeve, alt görünümlerde ve mülklerinde yaptığınız değişiklikleri kaydeder.
- Sistem, kullanıcı arayüzünü değişikliklerinize göre yeniden çizdiğinde çerçeve, orijinal durum ile yeni durum arasındaki değişikliklerin animasyonunu gösterir.
Aşağıdaki örnekte, gecikmeli geçiş kullanılarak görünüm hiyerarşisine metin görünümü ekleme işleminin nasıl canlandırılacağı gösterilmektedir. İlk snippet, düzen tanımı dosyasını gösterir:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/mainLayout" android:layout_width="match_parent" android:layout_height="match_parent" > <EditText android:id="@+id/inputText" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> ... </androidx.constraintlayout.widget.ConstraintLayout>
Sonraki snippet, metin görünümünün eklenmesiyle animasyon oluşturan kodu gösterir:
Kotlin
setContentView(R.layout.activity_main) val labelText = TextView(this).apply { text = "Label" id = R.id.text } val rootView: ViewGroup = findViewById(R.id.mainLayout) val mFade: Fade = Fade(Fade.IN) TransitionManager.beginDelayedTransition(rootView, mFade) rootView.addView(labelText)
Java
private TextView labelText; private Fade mFade; private ViewGroup rootView; ... // Load the layout. setContentView(R.layout.activity_main); ... // Create a new TextView and set some View properties. labelText = new TextView(this); labelText.setText("Label"); labelText.setId(R.id.text); // Get the root view and create a transition. rootView = (ViewGroup) findViewById(R.id.mainLayout); mFade = new Fade(Fade.IN); // Start recording changes to the view hierarchy. TransitionManager.beginDelayedTransition(rootView, mFade); // Add the new TextView to the view hierarchy. rootView.addView(labelText); // When the system redraws the screen to show this update, // the framework animates the addition as a fade in.
Geçiş yaşam döngüsü geri çağırmalarını tanımlayın
Geçiş yaşam döngüsü, etkinlik yaşam döngüsüne benzer. Bu, TransitionManager.go()
işlevine yapılan bir çağrı ile animasyonun tamamlanması arasındaki süre boyunca çerçevenin izlediği geçiş durumlarını gösterir. Önemli yaşam döngüsü durumlarında çerçeve, TransitionListener
arayüzü tarafından tanımlanan geri çağırmaları çağırır.
Geçiş yaşam döngüsü geri çağırmaları, örneğin bir sahne değişikliği sırasında başlangıç görünümü hiyerarşisinden bitiş görünümü hiyerarşisine bir görünüm özelliği değerinin kopyalanmasında yararlıdır. Bitiş görünümü hiyerarşisi, geçiş tamamlanana kadar şişirilmediğinden, değeri başlangıç görünümünden bitiş görünümü hiyerarşisindeki görünüme kopyalayamazsınız. Bunun yerine, değeri bir değişkende depolamanız ve çerçevenin geçişi tamamladığında bunu bitiş görünümü hiyerarşisine kopyalamanız gerekir. Geçiş tamamlandığında bildirim almak için etkinliğinizde TransitionListener.onTransitionEnd()
işlevini uygulayın.
Daha fazla bilgi için TransitionListener
sınıfının API referansına bakın.
Sınırlamalar
Bu bölümde, geçiş çerçevesiyle ilgili bilinen bazı sınırlamalar listelenmiştir:
SurfaceView
öğesine uygulanan animasyonlar doğru şekilde görünmeyebilir.SurfaceView
örneği, kullanıcı arayüzü olmayan bir iş parçacığından güncellendiğinden güncellemeler diğer görünümlerin animasyonlarıyla senkronize olmayabilir.- Bazı belirli geçiş türleri,
TextureView
öğesine uygulandığında istenen animasyon efektini üretmeyebilir. AdapterView
kapsamını genişletenListView
gibi sınıflar, çocuk görüntülemelerini geçiş çerçevesiyle uyumlu olmayan şekillerde yönetir. Bir görünümüAdapterView
temelinde animasyon haline getirmeye çalışırsanız cihaz ekranı yanıt vermeyi durdurabilir.- Bir
TextView
öğesini animasyonlu yeniden boyutlandırmaya çalışırsanız nesne tamamen yeniden boyutlandırılmadan önce metin yeni bir konuma açılır. Bu sorunu önlemek için, metin içeren görünümlerin yeniden boyutlandırmasıyla ilgili animasyon uygulamayın.