Materyal Tasarım uygulamalarındaki etkinlik geçişleri ortak öğeler arasındaki hareket ve dönüşümlerle farklı durumlar olabilir. Giriş ve çıkış geçişleri ve geçişler için özel animasyonlar belirtebilirsiniz. Paylaşılan öğelerin, etkinlikler arasında geçişleri.
- Enter geçişi, bir etkinlikteki görüntüleme sayısını belirler
sahneye girin. Örneğin,
explode
giriş geçişinde, sahneye dışarıdan girer ve sahnenin merkezine doğru içe doğru tıklayın. - Çıkış geçişi, bir etkinlik çıkışındaki görüntülemelerin nasıl olacağını belirler
sahne. Örneğin,
explode
çıkış geçişinde, sahneyi merkezden uzaklaştırarak çıkmasını sağlayabilirsiniz. - Paylaşılan öğeler geçişi,
bu etkinlikler arasındaki geçişleri
gözden geçireceğiz. Örneğin,
iki etkinlik farklı konumlarda ve boyutlarda aynı resme sahipse
changeImageTransform
paylaşılan öğe geçişi çevirir ve bu etkinlikler arasında görüntüyü düzgün şekilde ölçeklendirir.
Android aşağıdaki giriş ve çıkış geçişlerini destekler:
explode
: Görünümleri, sahnenin merkezine doğru veya merkezinden uzaklaştırır.slide
: görüntülemeleri resmin kenarlarının birinden içeri veya dışarı taşır sahne.fade
: Bir görünümü değiştirerek sahneye ekler veya sahneden görünüm kaldırır opaklık.
Visibility
sınıfını genişleten tüm geçişler, giriş veya çıkış geçişi olarak desteklenir.
Daha fazla bilgi için
Transition
.
sınıfını kullanır.
Android, aşağıdaki paylaşılan öğeler geçişlerini de destekler:
changeBounds
: hedefin düzen sınırlarındaki değişikliklere animasyon uygular görüntüleme.changeClipBounds
: hedefin klip sınırlarındaki değişikliklere animasyon uygular görüntüleme.changeTransform
: reklam öğesinin ölçek ve rotasyonundaki değişiklikleri hedef görüntüleme sayısıchangeImageTransform
: şu boyut ve ölçekteki değişiklikleri canlandırır: ve resimleri hedefleyebilirsiniz.
Uygulamanızda etkinlik geçişlerini etkinleştirdiğinizde varsayılan çapraz geçiş giriş ve çıkış etkinlikleri arasında geçiş etkinleşir.
Paylaşılan öğeleri kullanarak etkinlikler arasında animasyon oluşturan örnek kod için ActivitySceneTransitionBasic bölümüne gidin.
Sistem sürümünü kontrol edin
Etkinlik geçişi API'leri, Android 5.0 (API 21) ve sonraki sürümlerde kullanılabilir. Android'in önceki sürümleriyle uyumluluğu korumak için
sizden önce çalışma zamanında version
sistemi
şu özelliklerden herhangi biri için API'leri çağırmanıza yardımcı olur:
Kotlin
// Check if we're running on Android 5.0 or higher if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Apply activity transition } else { // Swap without transition }
Java
// Check if we're running on Android 5.0 or higher if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Apply activity transition } else { // Swap without transition }
Özel geçişleri belirtme
İlk olarak, android:windowActivityTransitions
ile pencere içeriği geçişlerini etkinleştirin
özelliğini kullanabilirsiniz. Ayrıca aşağıdakileri de belirtebilirsiniz:
Stil tanımınızda girme, çıkış ve paylaşılan öğe geçişleri:
<style name="BaseAppTheme" parent="android:Theme.Material"> <!-- enable window content transitions --> <item name="android:windowActivityTransitions">true</item> <!-- specify enter and exit transitions --> <item name="android:windowEnterTransition">@transition/explode</item> <item name="android:windowExitTransition">@transition/explode</item> <!-- specify shared element transitions --> <item name="android:windowSharedElementEnterTransition"> @transition/change_image_transform</item> <item name="android:windowSharedElementExitTransition"> @transition/change_image_transform</item> </style>
Bu örnekteki change_image_transform
geçişi aşağıdaki gibi tanımlanır:
<!-- res/transition/change_image_transform.xml --> <!-- (see also Shared Transitions below) --> <transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> <changeImageTransform/> </transitionSet>
changeImageTransform
öğesi,
ChangeImageTransform
sınıf. Daha fazla bilgi için API'ye bakın
Transition
için referans.
Bunun yerine kodunuzda pencere içeriği geçişlerini etkinleştirmek için
Window.requestFeature()
işlevi:
Kotlin
// Inside your activity (if you did not enable transitions in your theme) with(window) { requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS) // Set an exit transition exitTransition = Explode() }
Java
// Inside your activity (if you did not enable transitions in your theme) getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); // Set an exit transition getWindow().setExitTransition(new Explode());
Kodunuzda geçişleri belirtmek için bu işlevleri bir
Transition
nesne:
Window.setEnterTransition()
Window.setExitTransition()
Window.setSharedElementEnterTransition()
Window.setSharedElementExitTransition()
setExitTransition()
ve
setSharedElementExitTransition()
işlevleri çıkışı tanımlar
tercih edebilirsiniz. setEnterTransition()
ve
setSharedElementEnterTransition()
işlevleri, enter
geçişini sağlar.
Geçişten tam olarak yararlanmak için pencere içeriğini etkinleştirmeniz gerekir hem aramada hem de çağrılan etkinliklerde geçiş yapılmasını sağlar. Aksi halde etkinliği, çıkış geçişini başlatır, ancak sonrasında pencereyi görürsünüz. geçişler (ör. ölçeklenme veya solma) kullanılır.
Mümkün olan en kısa sürede giriş geçişini başlatmak için
Window.setAllowEnterTransitionOverlap()
.
işlevini çağırabilirsiniz. Bu sayede daha etkileyici giriş geçişleri elde edebilirsiniz.
Geçişleri kullanarak etkinlik başlatma
Geçişleri etkinleştirir ve bir etkinlik için çıkış geçişi ayarlarsanız Geçişiniz, aşağıdaki şekilde başka bir etkinlik başlattığınızda etkinleştirilir:
Kotlin
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle())
Java
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
İkinci etkinlik için bir giriş geçişi ayarlarsanız bu geçiş de
etkinlik başladığında etkinleştirilir. Başlangıçta geçişleri devre dışı bırakmak için
başka bir etkinlik için null
seçenek paketi sağlayın.
Paylaşılan öğeyle etkinlik başlatma
Belirli bir animasyona sahip olan iki etkinlik arasında paylaşılan öğe için aşağıdakileri yapın:
- Temanızda pencere içeriği geçişlerini etkinleştirin.
- Stilinizde, paylaşılan öğeler geçişi belirtin.
- Geçişinizi XML kaynağı olarak tanımlayın.
- Her iki düzende de paylaşılan öğelere
android:transitionName
özelliği için de kullanılmaktadır. ActivityOptions.makeSceneTransitionAnimation()
işlevini kullanın.
Kotlin
// Get the element that receives the click event val imgContainerView = findViewById<View>(R.id.img_container) // Get the common element for the transition in this activity val androidRobotView = findViewById<View>(R.id.image_small) // Define a click listener imgContainerView.setOnClickListener( { val intent = Intent(this, Activity2::class.java) // Create the transition animation - the images in the layouts // of both activities are defined with android:transitionName="robot" val options = ActivityOptions .makeSceneTransitionAnimation(this, androidRobotView, "robot") // Start the new activity startActivity(intent, options.toBundle()) })
Java
// Get the element that receives the click event final View imgContainerView = findViewById(R.id.img_container); // Get the common element for the transition in this activity final View androidRobotView = findViewById(R.id.image_small); // Define a click listener imgContainerView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(this, Activity2.class); // Create the transition animation - the images in the layouts // of both activities are defined with android:transitionName="robot" ActivityOptions options = ActivityOptions .makeSceneTransitionAnimation(this, androidRobotView, "robot"); // Start the new activity startActivity(intent, options.toBundle()); } });
Kodunuzda oluşturduğunuz paylaşılan dinamik görünümler için
Her ikisinde de ortak bir öğe adı belirtmek için View.setTransitionName()
işlevi
yardımcı olur.
İkinci etkinliği bitirdiğinizde sahne geçiş animasyonunu tersine çevirmek için
Activity.finishAfterTransition()
.
işlevini Activity.finish()
yerine kullanabilirsiniz.
Birden fazla paylaşılan öğeyle etkinlik başlatma
Daha fazla ayrıntı içeren iki etkinlik arasında bir sahne geçişi animasyonu oluşturmak için
birden fazla paylaşılan öğe içeriyorsa, paylaşılan öğeleri her iki düzende de
android:transitionName
özelliğini kullanın veya
View.setTransitionName()
her iki etkinlikte de çalışır
oluştur
ActivityOptions
nesnesini tanımlayın:
Kotlin
// Rename the Pair class from the Android framework to avoid a name clash import android.util.Pair as UtilPair ... val options = ActivityOptions.makeSceneTransitionAnimation(this, UtilPair.create(view1, "agreedName1"), UtilPair.create(view2, "agreedName2"))
Java
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view1, "agreedName1"), Pair.create(view2, "agreedName2"));