Android'in geçiş çerçevesi, başlangıç ve bitiş düzenleri sağlayarak kullanıcı arayüzünüzde her türlü hareketi canlandırmanıza olanak tanır. İstediğiniz animasyon türünü (ör. görünümlerin yavaşça açılması veya kapanması ya da görünüm boyutlarının değiştirilmesi) seçebilirsiniz. Geçiş çerçevesi, başlangıçtaki düzenden bitişteki düzene nasıl animasyon uygulanacağını belirler.
Geçiş çerçevesi aşağıdaki özellikleri içerir:
- Grup düzeyinde animasyonlar: Bir görüntüleme hiyerarşisindeki tüm görüntülemelere animasyon efektleri uygulayın.
- Yerleşik animasyonlar: Kararma veya hareket gibi yaygın efektler için önceden tanımlanmış animasyonları kullanın.
- Kaynak dosyası desteği: Görüntü hiyerarşileri ve yerleşik animasyonları, yerleşim kaynak dosyalarından yükleyin.
- Yaşam döngüsü geri çağırma işlevleri: Animasyon ve hiyerarşi değişikliği süreci üzerinde kontrol sağlayan geri çağırma işlevleri alın.
Sayfa düzeni değişiklikleri arasında animasyonlu geçiş yapan örnek kod için BasicTransition bölümüne bakın.
İki düzen arasında animasyon oluşturma işleminin temel adımları şunlardır:
- Başlangıç ve bitiş düzenleri için bir
Scene
nesnesi oluşturun. Ancak başlangıç düzeninin sahnesi genellikle mevcut düzenden otomatik olarak belirlenir. - Ne tür bir animasyon istediğinizi tanımlamak için bir
Transition
nesnesi oluşturun. TransitionManager.go()
çağrısı yapın ve sistem, düzenleri değiştirmek için animasyonu çalıştırır.
Şekil 1'deki şema, düzenler, sahneler, geçiş ve nihai animasyon arasındaki ilişkiyi gösterir.
Sahne oluşturma
Sahneler, tüm görünümleri ve mülk değerleri dahil olmak üzere bir görünüm hiyerarşisinin durumunu depolar. Geçiş çerçevesi, başlangıç ve bitiş sahnesi 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.
Sahneler, sahne değişikliği yaptığınızda çalıştırılacak kendi işlemlerini de tanımlayabilir. Bu özellik, bir sahneye geçiş yaptıktan sonra görüntüleme ayarlarını temizlemek için kullanışlıdır.
Düzen kaynağından sahne oluşturma
Scene
örneğini doğrudan bir düzen kaynak dosyasından oluşturabilirsiniz. Dosyadaki görünüm hiyerarşisi çoğunlukla statik olduğunda bu tekniği kullanın.
Ortaya çıkan sahne, Scene
örneğini oluşturduğunuz sıradaki görünüm hiyerarşisinin durumunu temsil eder. Görünüm hiyerarşisini değiştirirseniz
sahneyi yeniden oluşturun. Çerçeve, dosyanın görünüm hiyerarşisinin tamamından sahneyi 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üzeninizdeki sahne kökünü ViewGroup
olarak alın. Ardından, sahne kökünü ve sahnenin görünüm hiyerarşisini içeren düzen dosyasının kaynak kimliğini kullanarak Scene.getSceneForLayout()
işlevini çağırın.
Sahneler için düzenler tanımlama
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. Bu snippet'ler, birbiriyle alakalı olduklarını belirtmeden 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 öğe içeren bir etkinliğin ana düzeni
FrameLayout
. - İki metin alanı içeren ilk sahne için bir
ConstraintLayout
. - Farklı sıradaki aynı iki metin alanını içeren ikinci sahne için 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 sabit kalır.
Etkinliğin ana düzeni aşağıdaki gibi 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 dahil edilir.
Bu, uygulamanın bunu ilk kullanıcı arayüzünün bir parçası olarak görüntülemesine ve bir sahneye yüklemesine olanak tanır. Çünkü çerçeve, yalnızca bir düzen dosyasının tamamını 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ı kimliklere sahip iki metin alanını farklı bir sırada yerleştirir. 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şturma
İki kısıtlama düzeni için tanımlar oluşturduktan sonra her biri için bir sahne elde edebilirsiniz. Bu sayede iki kullanıcı arayüzü yapılandırması arasında geçiş yapabilirsiniz. Sahne almak için sahne köküne ve düzen kaynak kimliğine referans vermeniz gerekir.
Aşağıdaki kod snippet'inde, sahne köküne referans almanın ve düzen dosyalarından iki Scene
nesnesi oluşturmanın nasıl yapılacağı gösterilmektedir:
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 vardır. 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 de oluşturabilirsiniz. Görünüm hiyerarşilerini doğrudan kodunuzda değiştirirken veya dinamik olarak oluştururken bu tekniği kullanın.
Kodunuzdaki bir görünüm hiyerarşisi üzerinden sahne oluşturmak için Scene(sceneRoot, viewHierarchy)
sınıfının kurucusunu kullanın. Bu oluşturucunun çağrılması, bir düzen dosyasını şişirdiğinizde Scene.getSceneForLayout()
işlevinin çağrılmasına eşdeğerdir.
Aşağıdaki kod snippet'inde, kodunuzda sahne kök öğesinden ve sahnenin görüntü hiyerarşisindeki bir Scene
örneğinin nasıl oluşturulacağı gösterilmektedir:
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şturma
Ç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 geçişi otomatik olarak canlandırdığı için çoğu durumda özel sahne işlemleri tanımlamak gerekmez.
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ş sahnelerinin görünümlerini canlandırabilirsiniz.
- Geçiş çerçevesinin otomatik olarak animasyon oluşturamadığı görünümleri (ör.
ListView
nesneleri) animasyonlu hale getirmek için kullanılır. Daha fazla bilgi için sınırlamalar bölümüne bakın.
Ö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 içeren sahneler arasındaki animasyon 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 benzer ve çerçevenin bir animasyonun başlangıcı ile tamamlanması arasında izlediği geçiş durumlarını temsil eder. Çerçeve, yaşam döngüsünün önemli durumlarında 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üntüleme 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 | Efekt |
---|---|---|
AutoTransition |
<autoTransition/> |
Varsayılan geçiş. Görünümleri sırasıyla karartır, taşır, yeniden boyutlandırır ve gösterir. |
ChangeBounds |
<changeBounds/> |
Görünümleri taşır ve yeniden boyutlandırır. |
ChangeClipBounds |
<changeClipBounds/> |
Sahne değişikliğinden önce ve sonra View.getClipBounds() 'yi yakalar ve geçiş sırasında bu değişiklikleri animasyonlu olarak gösterir. |
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 önce ve sonra hedeflerin kaydırma özelliklerini yakalar ve değişiklikleri animasyonlu olarak gösterir. |
ChangeTransform |
<changeTransform/> |
Sahne değişikliğinden önce ve sonra görünümlerin ölçeğini ve dönüşünü yakalar ve geçiş sırasında bu değişiklikleri animasyonlu olarak gösterir. |
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 doğru içeri veya dışarı taşır. |
Fade |
<fade/> |
fade_in görüntülemelerde yavaş yavaş kaybolur.fade_out görüntüleme sayısını azaltır.fade_in_out (varsayılan) bir fade_out 'den sonra bir fade_in yapar.
|
Slide |
<slide/> |
Başlangıç ve bitiş sahnelerindeki hedef görünümlerin görünürlüğüyle ilgili değişiklikleri izler ve görünümleri sahnenin kenarlarından birine doğru içeri veya dışarı 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ştirmenize olanak tanır. 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 geçiş belirtmek için aşağıdaki 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 bir 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 geçiş nesnelerini dinamik olarak oluşturmak ve az sayıda parametre içeren veya parametre içermeyen basit yerleşik geçiş örnekleri oluşturmak için kullanışlıdır.
Yerleşik bir geçiş örneği oluşturmak için Transition
sınıfının alt sınıflarındaki herkese açık 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 bir kullanıcı işlemi gibi bir etkinliğe yanıt olarak farklı görüntüleme hiyerarşileri arasında geçiş yapmak için 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 görünen 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 için aşağıdaki snippet'te gösterildiği gibi, bitiş sahnesini ve animasyon için kullanılacak geçiş örneğini içeren TransitionManager.go()
sınıf işlevini ç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 sahne kökü içindeki görünüm hiyerarşisini bitiş sahnesindeki görünüm hiyerarşisi ile 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çme
Çerçeve, varsayılan olarak başlangıç ve bitiş sahnelerindeki tüm görünümlere geçişler uygular. Bazı durumlarda, bir animasyonu yalnızca sahnedeki görünümlerin bir alt kümesine uygulamak isteyebilirsiniz. Çerçeve, animasyon eklemek istediğiniz belirli
görünümleri seçmenize olanak tanır. Örneğin, çerçeve ListView
nesnelerindeki değişikliklerin animasyonlu olarak gösterilmesini desteklemez. Bu nedenle, geçiş sırasında bu nesneleri animasyonlu olarak göstermeye çalışmayın.
Geçişin animasyonlu olarak 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ında bazı görünümleri kaldırıp başka görünümler ekliyorsanız kaybolma veya görünmeye başlama animasyonu, bazı görünümlerin artık kullanılamadığını belirgin bir şekilde gösterir. 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'de bir geçiş koleksiyonundan geçiş grubu tanımlamak için res/transitions/
dizininde bir kaynak dosyası oluşturun ve geçişleri TransitionSet
öğesinin 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ından türetildiği için diğer tüm Transition
örnekleri gibi geçiş yöneticisiyle kullanabilirsiniz.
Sahne olmadan geçiş uygulama
Kullanıcı arayüzünüzü değiştirmenin tek yolu görüntüleme hiyerarşilerini değiştirmektir. Mevcut hiyerarşide alt görünümler ekleyerek, değiştirerek ve kaldırarak da değişiklik yapabilirsiniz.
Örneğin, tek bir düzenle arama etkileşimi uygulayabilirsiniz. Arama girişi alanı ve arama simgesi bulunan düzenle başlayın. Kullanıcı arayüzünü sonuçları gösterecek şekilde değiştirmek için ViewGroup.removeView()
işlevini çağırarak kullanıcı dokunduğunda 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 fark için iki ayrı düzen dosyası oluşturup yönetmek yerine, kodda değiştirdiğiniz bir görünüm hiyerarşisi içeren tek bir düzen dosyanız olabilir.
Mevcut 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 geçiş oluşturabilir ve uygulayabilirsiniz. Geçişler çerçevesinin bu özelliği, mevcut görünüm hiyerarşisi durumundan 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 animasyonlu hale getiren bir geçiş uygular.
Tek bir görünüm hiyerarşisi içinde gecikmeli geçiş oluşturmak için aşağıdaki adımları uygulayın:
- Geçişi tetikleyen etkinlik gerçekleştiğinde, değiştirmek istediğiniz tüm görünümlerin üst görünümünü ve kullanılacak geçişi 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 gereği gereken değişiklikleri yapın. Çerçeve, alt görünümlerde ve bunların özelliklerinde 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'te, düzen tanımı dosyası gösterilmektedir:
<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ğırma işlevlerini tanımlama
Geçiş yaşam döngüsü, etkinlik yaşam döngüsüne benzer. Bu, çerçevenin TransitionManager.go()
işlevine yapılan bir çağrı ile animasyonun tamamlanması arasındaki dönemde izlediği geçiş durumlarını temsil eder. Ö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ğırma işlevleri, örneğin bir sahne değişikliği sırasında bir görüntüleme mülkü değerini başlangıç görüntüleme hiyerarşisindeki bitiş görüntüleme hiyerarşisine kopyalamak için 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 ardından çerçeve geçişi tamamladığında son görüntü 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
örnekleri, 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.- Belirli geçiş türleri,
TextureView
'a uygulandığında istenen animasyon efektini oluşturmayabilir. ListView
gibiAdapterView
'u genişleten sınıflar, alt görünümlerini geçiş çerçevesiyle uyumlu olmayan şekillerde yönetiyor. Bir görünümüAdapterView
'e göre animasyonlu hale getirmeyi denerseniz cihaz ekranı yanıt vermeyebilir.- Bir
TextView
öğesini animasyonla 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ırılmasını animasyonlu hale getirmeyin.