Android'in geçiş çerçevesi, başlangıç ve bitiş düzenlerini sağlayarak kullanıcı arayüzünde her tür hareketi canlandırmanıza olanak tanır. Ne tür bir animasyon istediğinizi seçebilirsiniz (örneğin, görünümlerin karartılması veya kapanması ya da görünüm boyutlarını değiştirmek) ve geçiş çerçevesi, başlangıç düzeninden bitiş düzenine nasıl animasyon yapılacağını belirler.
Geçiş çerçevesi aşağıdaki özellikleri içerir:
- Grup düzeyinde animasyonlar: Animasyon efektlerini görünüm hiyerarşisindeki tüm görünümlere uygular.
- Yerleşik animasyonlar: Uygulamada kararma veya hareket gibi yaygın efektler için önceden tanımlanmış animasyonlar kullanın.
- Kaynak dosyası desteği: Görünüm hiyerarşilerini ve düzen kaynak dosyalarındaki yerleşik animasyonları yükleme.
- 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 uygulayan örnek kod için BasicTransition bölümüne bakın.
İki düzen arasında animasyon oluşturmak için temel süreç şu şekildedir:
- Başlangıç ve bitiş düzenleri için bir
Scenenesnesi oluşturun. Ancak, başlangıç düzeninin düzeni genellikle geçerli düzene göre otomatik olarak belirlenir.
- Ne tür bir animasyon istediğinizi tanımlamak için bir
Transitionnesnesi oluşturun.
TransitionManager.go()yöntemini çağırdığınızda sistem, düzenleri değiştirmek için animasyonu çalıştırır.
Şekil 1'deki şemada düzenleriniz, sahneler, geçiş ve nihai 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şler ç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 gerçekleştirilecek kendi işlemlerini de tanımlayabilir. Bu özellik, bir sahneye geçiş yaptıktan sonra görünüm ayarlarını temizlemek için yararlıdır.
Düzen kaynağından sahne oluşturma
Doğrudan bir düzen kaynak dosyasından
Scene örneği oluşturabilirsiniz. Bu tekniği, dosyadaki görünüm hiyerarşisi büyük ölçüde statikse 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, dosyada tüm görünüm hiyerarşisinden
sahneyi oluşturur. Bir düzen dosyasının bir bölümünden sahne oluşturamazsınız.
Düzen kaynak dosyasından
Scene örneği oluşturmak için düzeninizden sahne kökünü
ViewGroup olarak alın. Ardından,
Scene.getSceneForLayout() işlevini, sahne kökü ve sahnenin görünüm hiyerarşisini içeren düzen dosyasının kaynak kimliğiyle birlikte çağırın.
Sahneler için düzenleri tanımlama
Bu bölümün geri kalanındaki kod snippet'lerinde, aynı sahne kök öğesiyle nasıl iki farklı sahnenin nasıl oluşturulacağı gösterilmektedir. Snippet'ler, birbiriyle ilişkili olduklarını belirtmeden birden çok 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
FrameLayoutolan bir etkinliğin ana düzeni.
- İki metin alanı içeren ilk sahne için
ConstraintLayout.
- İkinci sahne için aynı iki metin alanı farklı sırada olan bir
ConstraintLayout.
Örnek, tüm animasyonun etkinliğin ana düzeninin alt düzeninde gerçekleşeceği ş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 düzen kökü için bir alt
FrameLayout içerir. İlk sahnenin düzeni, ana düzen dosyasına eklenir.
Böylece, çerçeve bir sahneye yalnızca tüm düzen dosyasını yükleyebildiği için, uygulamanın bunu ilk kullanıcı arayüzünün parçası olarak görüntülemesine ve ayrıca sahneye yüklemesine olanak tanır.
İ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 sahne düzeni, farklı bir sırada yerleştirilmiş aynı kimliklere sahip 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üzenlerlerden sahne oluştur
İki sınırlama düzeni için tanım oluşturduktan sonra bunların her biri için bir düzen elde edebilirsiniz. Bu, iki kullanıcı arayüzü yapılandırması arasında geçiş yapmanızı sağlar. Bir sahneyi elde etmek için sahne köküne ve düzen kaynağı 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şturulacağını 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 bulunur. 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
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 görünüm hiyerarşisinden bir 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şken
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östermektedir:
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, bir sahneye girerken veya sahneden çıkarken sistemin çalıştıracağı özel sahne eylemleri tanımlamanızı sağlar. Çerçeve, sahneler arasındaki değişikliği otomatik olarak canlandırdığından özel sahne eylemlerinin tanımlanması çoğu durumda gerekli değildir.
Sahne işlemleri, aşağıdaki durumların ele alınmasında yararlıdır:
- Aynı hiyerarşide olmayan görünümleri canlandırmak 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ıramadığı görünümleri (ör.
ListViewnesneleri) canlandırmak için. Daha fazla bilgi için sınırlamalar hakkındaki bölüme 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 ve 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 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.
Ardından, son
Scene ve
Transition öğelerini
TransitionManager.go() öğesine geçirerek animasyonu sahneler arasında ç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, geçişin farklı aşamalarında kullanıcı arayüzünüzü 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. Aralarında geçiş yapmak istediğiniz başlangıç ve bitiş sahnelerini tanımladıktan sonra, animasyonu tanımlayan bir
Transition nesnesi oluşturun.
Çerçeve, kaynak dosyasında yerleşik bir geçiş belirtmenize ve bunu kodunuzda şişirmenize veya doğrudan kodunuzda yerleşik geçiş örneği oluşturmanıza olanak tanır.
|Sınıf
|Etiketle
|Etki


AutoTransition


<autoTransition/>
|Varsayılan geçiş. Belirtilen sırayla kararır, hareket eder, yeniden boyutlandırılır ve görünümlerde kararır.


ChangeBounds


<changeBounds/>
|Görünümleri taşır ve yeniden boyutlandırır.


ChangeClipBounds


<changeClipBounds/>
|Sahne değişiminden önceki ve sonraki
View.getClipBounds() görüntülerini yakalar ve geçiş sırasında bu değişikliklere animasyon ekler.


ChangeImageTransform


<changeImageTransform/>
|Sahne değişiminden önceki ve sonraki
ImageView matrisini yakalar ve geçiş sırasında animasyona dahil eder.


ChangeScroll


<changeScroll/>
|Sahne değişiminden önce ve sonra hedeflerin kaydırma özelliklerini yakalar ve tüm değişikliklere animasyon uygular.


ChangeTransform


<changeTransform/>
|Sahne değişiminden önceki ve sonraki görünümlerin ölçeğini ve dönüşünü kaydeder ve geçiş sırasında bu değişikliklere animasyon ekler.


Explode


<explode/>
|Başlangıç ve bitiş sahnelerinde hedef görüntülemelerin görünürlüğünde yapılan değişiklikleri izler ve görüntülemeleri sahnenin kenarlarının içine veya dışına taşır.


Fade


<fade/>


fade_in, görüntüleme sayısında düşüş var.
fade_out, arka plan rengini azaltır.
fade_in_out (varsayılan),
fade_out ve ardından
fade_in yapar.


Slide


<slide/>
|Başlangıç ve bitiş sahnelerinde hedef görüntülemelerin görünürlüğünde yapılan değişiklikleri izler ve görünümleri 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ştirmenize olanak tanır. Bu teknik, birden çok geçiş belirtme hakkındaki bölümde gösterildiği gibi, karmaşık geçiş tanımlarını uygulama kodunuzdan ayırmak için de kullanışlıdır.
Bir kaynak dosyada yerleşik geçiş belirtmek için şu adımları izleyin:
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 dosyadaki etkinliğinizin içinde 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 ya da hiç parametre içermeyen basit yerleşik geçiş örnekleri oluşturmak için yararlıdır.
Yerleşik geçişin bir örneğini 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üşünün: Kullanıcı bir arama terimi girip arama düğmesine dokunduğunda, uygulama, sonuç düzenini temsil eden bir sahneye dönüşürken arama düğmesinin karartıldığı ve arama sonuçlarında kararan bir geçiş uygulanır.
Etkinliğinizdeki bir etkinliğe yanıt olarak geçiş uygularken sahne değişikliği yapmak için
TransitionManager.go() sınıf işlevini, aşağıdaki snippet'te gösterildiği gibi bitiş sahnesi 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ğinin belirttiği animasyonu çalıştırırken sahne kökü içindeki görünüm hiyerarşisini bitiş sahnedeki görünüm hiyerarşisiyle değiştirir. Başlangıç sahnesi, son geçişten itibaren bitiş sahnesidir. Daha önce herhangi bir geçiş yoksa başlangıç sahnesi, kullanıcı arayüzünün mevcut 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 geçiş uygulayabilir. Daha fazla bilgi için
TransitionManager sınıfıyla ilgili API referansına bakın.
Belirli hedef görünümleri seçin
Çerçeve, varsayılan olarak başlangıç ve bitiş sahnelerindeki tüm görüntülemelere geçişler uygular. Bazı durumlarda, bir sahnedeki görüntülemelerin yalnızca bir alt kümesine animasyon uygulamak isteyebilirsiniz. Çerçeve, canlandırmak istediğiniz
görünümleri seçebilmenizi sağlar. Örneğin, çerçeve
ListView nesnelerinde yapılan değişikliklerin animasyonunu desteklemez. Bu nedenle, geçiş sırasında bunları canlandırmaya çalışmayın.
Geçişin canlandırdığı her görünüme hedef adı verilir. Yalnızca bir sahneyle ilişkili görünüm hiyerarşisinin parçası olan hedefleri seçebilirsiniz.
Hedefler listesinden bir veya daha fazla görünümü kaldırmak için geçişi başlatmadan önce
removeTarget() yöntemini çağırın. Hedef listesine yalnızca belirttiğiniz görünümleri eklemek için
addTarget() işlevini çağırın. Daha fazla bilgi için
Transition sınıfıyla ilgili API referansına bakın.
Birden çok geçiş belirtme
Bir animasyondan en iyi etkiyi elde etmek için, sahneleri arasında gerçekleşen değişikliklerin türüyle eşleştirin. Örneğin, bazı görünümleri kaldırıp sahneler arasına başka görüntüler ekliyorsanız animasyonun soluklaşması veya kayması, bazı görüntülemelerin artık kullanılamadığına dair belirgin bir işaret sağlar. Görünümleri ekrandaki farklı noktalara taşıyorsanız, kullanıcıların görünümlerin yeni konumunu fark etmesi için hareketi canlandırmak daha iyi olur.
Geçişler çerçevesi, bağımsız yerleşik veya özel geçişlerden oluşan bir grup içeren bir geçiş grubunda animasyon efektlerini birleştirmenizi sağladığından yalnızca bir animasyon seçmeniz gerekmez.
XML'deki bir geçiş koleksiyonundan 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'te
AutoTransition sınıfıyla aynı davranışa sahip bir geçiş grubunun nasıl belirtileceği gösterilmektedir:
<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>
Ayarlanan geçişi kodunuzda bir
TransitionSet nesnesine dönüştürmek için etkinliğinizde
TransitionInflater.from() işlevini çağırın.
TransitionSet sınıfı
Transition sınıfından alınır. Böylece bu sınıfı herhangi bir
Transition örneği gibi bir geçiş yöneticisiyle kullanabilirsiniz.
Sahne olmadan geçiş uygulama
Görünüm hiyerarşilerini değiştirmek, kullanıcı arayüzünüzü değiştirmenin tek yolu değildir. Mevcut hiyerarşideki alt görünümleri ekleyerek, değiştirerek ve kaldırarak da değişiklik yapabilirsiniz.
Örneğin, tek bir düzenle arama etkileşimi
uygulayabilirsiniz. Bir arama giriş alanı ve arama simgesi gösteren düzenle
başlayın. Kullanıcı arayüzünü sonuçları gösterecek şekilde değiştirmek için kullanıcı dokunduğunda arama düğmesini
ViewGroup.removeView() işlevini çağırarak kaldırın ve
ViewGroup.addView() işlevini çağırarak arama sonuçlarını ekleyin.
Alternatif olarak, neredeyse aynı olan iki hiyerarşiye sahip olmak söz konusuysa bu yaklaşımı kullanabilirsiniz. Kullanıcı arayüzündeki küçük bir fark için iki ayrı düzen dosyası oluşturup bunları yönetmek yerine, kodda değiştirdiğiniz bir görünüm hiyerarşisini 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 bir geçiş oluşturup uygulayabilirsiniz. Geçiş ç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 bir görünüm hiyerarşisinde gecikmeli geçiş oluşturmak için şu 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ğlamak için
TransitionManager.beginDelayedTransition()işlevini çağırın. Çerçeve, alt görüntülemelerin mevcut durumunu ve özellik 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 özelliklerinde yaptığınız değişiklikleri kaydeder.
- Değişiklikleriniz doğrultusunda sistem, kullanıcı arayüzünü yeniden çizdiğinde, çerçeve, orijinal durum ile yeni durum arasındaki değişiklikleri canlandırır.
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 animasyon yapılacağı gösterilmektedir. İlk snippet, düzen tanımlama 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>
Bir sonraki snippet'te, metin görünümü ekleme işlemini canlandıran kod gösterilir:
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 benzerdir. Çerçevenin,
TransitionManager.go() işlevine yapılan çağrı ile animasyonun tamamlanması arasındaki süre boyunca 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ğı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ı gibi durumlarda 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çeve 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ğinize
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ü dışındaki 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'e uygulandığında istenen animasyon efektini üretmeyebilir.
AdapterView'i genişleten (
ListViewgibi) sınıflar, alt görünümlerini geçiş çerçevesiyle uyumsuz şekilde yönetir.
AdapterViewtemel alınarak bir görünümü canlandırmaya çalışırsanız cihaz ekranı yanıt vermeyi durdurabilir.
- Animasyonlu bir
TextViewboyutunu yeniden boyutlandırmaya çalışırsanız nesne tamamen yeniden boyutlandırılmadan önce metin yeni bir konuma taşınır. Bu sorunu önlemek için metin içeren görünümlerin yeniden boyutlandırılmasına animasyon uygulamayın.