Sistem destekli API'leri kullanırken uygulama içi animasyonlar almayı etkinleştirebilir ve özel geçişleri destekleyebilirsiniz.
Bu özelliği etkinleştirdikten sonra uygulamanız ana sayfaya geri dönme, etkinlik ve görevler arasında geçiş yapma animasyonlarını gösterir.
Aşağıdaki gibi materyal bileşen animasyonlarını almak için materyal bileşeni bağımlılığınızı MDC Android'in 1.10.0 sürümüne de yükseltebilirsiniz:
Daha fazla bilgi için GitHub'daki materyal bileşeni geliştirici kılavuzuna bakın.
Videoda, Android Ayarlar uygulaması kullanılarak etkinlikler arasında geçiş yapma ve ana ekrana geri dönme için tahmini geri animasyonlara dair kısa bir örnek gösterilmektedir.
- Animasyonda, kullanıcı önceki ayarlar ekranına dönmek için geri kaydırmaktadır. Bu, etkinlik arası animasyon örneğidir.
- Kullanıcı, önceki ekranda ikinci kez geri kaydırmaya başlar. Bu sırada, ana ekranın duvar kağıdıyla birlikte önizlemesi gösterilir. Bu, ana ekrana geri dönme animasyonuna örnektir.
- Kullanıcı sağa kaydırmaya devam eder. Pencerenin ana ekrandaki simge boyutuna küçüldüğü animasyon gösterilir.
- Kullanıcı artık ana ekrana tamamen geri döndü.
Tahmini geri hareketleri destekleme hakkında daha fazla bilgi edinin.
Özel uygulama içi geçişler ve animasyonlar ekleme
Tahmini geri hareketleriyle özel uygulama içi mülk animasyon ve geçişleri, özel etkinlik arası animasyonlar ve özel parçalar arası animasyonlar oluşturabilirsiniz.
Progress API'yi kullanarak özel geçişler ekleme
AndroidX Activity 1.8.0-alpha01 veya sonraki sürümlerde, uygulamanızda tahmini geri hareketi için özel animasyonlar geliştirmek üzere Tahmini Geri İlerleme API'lerini kullanabilirsiniz. İlerleme API'leri, görünümleri animasyonlu hale getirmede faydalıdır ancak parçalar arasındaki geçişleri animasyonlu hale getirmede sınırlamaları vardır. OnBackPressedCallback
sürümünde, kullanıcı geri kaydırdığı sırada nesneleri canlandırmak için handleOnBackProgressed
, handleOnBackCancelled
ve handleOnBackStarted
yöntemlerini kullanıma sunduk. Sistem tarafından sağlanan varsayılan animasyonlardan veya Material bileşeni animasyonlarından daha fazlasını özelleştirmeniz gerekiyorsa bu yöntemleri kullanın.
Çoğu uygulamanın geriye dönük uyumlu AndroidX API'lerini kullanmasını bekleriz. Bununla birlikte, Android 14 Geliştirici Önizlemesi 1 ve sonraki sürümlerde test edebileceğiniz OnBackAnimationCallback
arayüzünde benzer platform API'leri de vardır.
AndroidX geçişleriyle Progress API'leri kullanma
İlerleme API'leri, Android 14 ve sonraki sürümlerde Tahmini Geri geçişleri oluşturmak için AndroidX Geçişler 1.5.0-alpha01 veya sonraki sürümlerle kullanılabilir.
- Kullanıcı geri kaydırdığında geçişleri oynatmak için
beginDelayedTransition
yerineTransitionManager#controlDelayedTransition
kullanın. - Geçişi
handleOnBackStarted
içinde oluşturun. currentFraction
'uBackEvent.progress
ile ilişkilendirerekhandleOnBackProgressed
içinde geri etkinliğiyle geçişi oynatın. Bu, kullanıcının geri ne kadar kaydırdığını gösterir.- Kullanıcı
handleOnBackPressed
'te geri hareketini tamamladıktan sonra geçişi tamamlayın. - Son olarak,
handleOnBackCancelled
içinde geçişin durumunu sıfırlayın.
Aşağıdaki video, Kotlin kodu ve XML, OnBackPressedCallback
ile uygulanan iki kutu arasında özel bir geçişi göstermektedir:
class MyFragment : Fragment() { val transitionSet = TransitionSet().apply { addTransition(Fade(Fade.MODE_OUT)) addTransition(ChangeBounds()) addTransition(Fade(Fade.MODE_IN)) } ... override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val callback = object : OnBackPressedCallback(enabled = false) { var controller: TransitionSeekController? = null @RequiresApi(34) override fun handleOnBackStarted(backEvent: BackEvent) { // Create the transition controller = TransitionManager.controlDelayedTransition( binding.card, transitionSet ) changeTextVisibility(ShowText.SHORT) } @RequiresApi(34) override fun handleOnBackProgressed(backEvent: BackEvent) { // Play the transition as the user swipes back if (controller?.isReady == true) { controller?.currentFraction = backEvent.progress } } override fun handleOnBackPressed() { // Finish playing the transition when the user commits back controller?.animateToEnd() this.isEnabled = false } @RequiresApi(34) override fun handleOnBackCancelled() { // If the user cancels the back gesture, reset the state transition(ShowText.LONG) } } binding.shortText.setOnClickListener { transition(ShowText.LONG) callback.isEnabled = true } this.requireActivity().onBackPressedDispatcher.addCallback(callback) } private fun transition(showText: ShowText) { TransitionManager.beginDelayedTransition( binding.card, transitionSet ) changeTextVisibility(showText) } enum class ShowText { SHORT, LONG } private fun changeTextVisibility(showText: ShowText) { when (showText) { ShowText.SHORT -> { binding.shortText.isVisible = true binding.longText.isVisible = false } ShowText.LONG -> { binding.shortText.isVisible = false binding.longText.isVisible = true } } } }
<?xml version="1.0" encoding="utf-8"?>
...
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
...>
<TextView
android:id="@+id/short_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
... />
<TextView
android:id="@+id/long_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
.../>
</androidx.constraintlayout.widget.ConstraintLayout>
Tahmini geri geçişlerle çalışırken aşağıdakileri göz önünde bulundurun:
- Geçişin Tahmini Geri özelliğini destekleyip desteklemediğini kontrol etmek için
isSeekingSupported
simgesini kullanın. - Özel geçişleriniz için doğru değerini döndürmek üzere
isSeekingSupported
değerini geçersiz kılın. - Her animasyon için bir denetleyici oluşturun.
- Tahmini geri geçişler AndroidX geçişlerinde desteklenir ancak çerçeve geçişlerinde desteklenmez. Çerçeve geçişlerinden uzaklaşın ve bunun yerine
Animator
ve AndroidX geçişlerini kullanın. - Tahmini Geri geçişleri, Android 14 ve sonraki sürümleri çalıştıran cihazlarda desteklenir ve geriye dönük uyumlu değildir.
- XML sahneleriyle oluşturulan geçişler de desteklenir.
handleOnBackStarted
içinde,TransitionSeekController
'unuzucontrolDelayedTransition
sonucu yerineTransitionManager.createSeekController
sonucuna ayarlayın.
Android 14 ve sonraki sürümlerde özel etkinlik geçişleri ekleme
Özel etkinlik geçişlerinin Android 14 ve sonraki sürümlerde Tahmini Geri özelliğini desteklemesini sağlamak için overridePendingTransition
yerine overrideActivityTransition
kullanabilirsiniz. Bu, kullanıcı geri kaydırdığı sırada geçiş animasyonunun oynatılacağı anlamına gelir.
Bunun nasıl işleyebileceğine dair bir örnek vermek için arka yığınta B etkinliğinin A etkinliğinin üzerinde olduğu bir senaryo düşünün. Özel etkinlik animasyonları aşağıdaki şekilde ele alınır:
- B etkinliğinin
onCreate
metodunda açılış veya kapanış geçişlerini çağırın. - Kullanıcı B etkinliğine gittiğinde
OVERRIDE_TRANSITION_OPEN
değerini kullanın. Kullanıcı A etkinliğine geri gitmek için ekranı kaydırdığındaOVERRIDE_TRANSITION_CLOSE
değerini kullanın. OVERRIDE_TRANSITION_CLOSE
belirtilirkenenterAnim
, A etkinliğinin giriş animasyonu,exitAnim
ise B etkinliğinin çıkış animasyonudur.
Parçalarla tahmini geri gitme desteği ekleme
Tahmini Geri özelliğini parçalarla uygularken iki yaklaşım vardır.
Mevcut API'leri kullanma
Mevcut API'leri kullanmanızı öneririz. Bu API'ler, ekranın kenarından kaydırarak Animator veya Androidx geçişlerinizi hareketle değiştirmenize olanak tanır. Hareketi bir eşiğin ötesine taşırsanız hareketin tamamlanıp önceki parçaya dönüp dönmeyeceğini veya iptal edilip mevcut parçada kalıp kalmayacağını belirlersiniz. Daha fazla bilgi için Animasyonlar kullanarak parçalar arasında gezinme başlıklı makaleyi inceleyin.
Aşağıdaki faktörleri göz önünde bulundurun:
- Geçişler 1.5.0 veya sonraki sürümleri ve Bölüntüler 1.7.0 veya sonraki sürümleri içe aktarın. Fragments'teki tahmini geri desteğinin büyük kısmı, Geçişler'in animasyon arayabilmesine bağlıdır. Bu yalnızca Geçişler 1.5.0 veya sonraki sürümlerde mümkündür.
- Geri yığınını işlemek için
FragmentManager
veya Gezinme Bileşeni ile birlikte Fragment'leri kullanın. Kendi geri yığınınızı yönetiyorsanız tahmini geri özelliği desteklenmez.FragmentManager
'nin bilmediği arka yığınlardan uzaklaşın. - Bazı kitaplıklarda tahmini geri desteği bulunur. Emin olmak için dokümanları inceleyin.
Animator
sınıfı veAndroidX Transition
kitaplığı desteklenir.Animation
sınıfı veTransition
çerçeve kitaplığı desteklenmez.- Tahmini animasyonlar yalnızca Android 14 veya sonraki sürümlerin yüklü olduğu cihazlarda çalışır.
Tahmini geri çapraz parçaları aşağıdaki durumlarda kullanın:
- Gezinme bileşenine animasyon ekleyin.
setCustomAnimations
ile animasyon ekleyin.setEnterTransition
,setExitTransition
,setReenterTransition
vesetReturnTransition
ile giriş ve çıkış geçişlerini canlandırın.- Paylaşılan öğe geçişlerini
setSharedElementEnterTransition
vesetSharedElementReturnTransition
ile canlandırın.
Bazı maddi hareketler, MaterialFadeThrough
, MaterialSharedAxis
ve MaterialFade
dahil olmak üzere 1.12.02-alpha02 veya sonraki sürümlerde tahmini geri oynatmayı destekler. MaterialContainerTransform
, tahmini geri oynatma özelliğini desteklemez.
Geri aramaları kullanma
Geri çağırma işlevlerini kullanarak parçalar arası geçiş oluşturabilirsiniz. Ancak geri çağırma işlevleri kullanıldığında, kullanıcıların geri kaydırarak önceki parçayı görememesi gibi bilinen bir sınırlama vardır. Tahmini geri tasarım kılavuzuna uygun bir parçalar arası paylaşılan öğe geçişi oluşturmak için aşağıdakileri yapın:
Bir OnBackPressedCallback
oluşturun. handleOnBackProgressed
içinde, parçayı ölçeklendirin ve kaydırın. Ardından, arkadaki yığıntan çıkarın. Ardından, geri çağırma işlevinin dışında setSharedElementReturnTransition
kullanarak paylaşılan öğe geçişini çalıştırın.
Daha fazla bilgi için GitHub'daki kod örneğine bakın.
Şartlar
targetSdkVersion
ve compileSdkVersion
, cihaz sürümü, bağımlılar, manifest işaretleri ve parça işaretleri tarafından nelerin kontrol edildiğini anlamak için aşağıdaki tablodan yararlanın. Bu tabloda kod koşulları açıklanmaktadır.
Kategori | Animasyon | compileSdk | targetSdk | Cihaz sürümü | android:enableOnBackInvokedCallback | Bağımlılık |
---|---|---|---|---|---|---|
Sistem Animasyonları | Ana sayfaya dön | 33 | Tümü | 35 | DOĞRU | Yok |
Etkinlikler arası | 34 | Tümü | 35 | DOĞRU | Yok | |
Görevler arası | 34 | Tümü | 35 | DOĞRU | Yok | |
Platform | Özel çapraz etkinlik | 34 | Tümü | 35 | DOĞRU | Yok |
Progress API Platform | 34 | Tümü | 34 | DOĞRU | Yok | |
Material Bileşenleri | Alt Sayfa | 34 | Tümü | 34 | DOĞRU | Material Component 1.10.0 |
Yan Sayfa | 34 | Tümü | 34 | DOĞRU | Material Component 1.10.0 | |
Gezinme Çekmecesi | 34 | Tümü | 34 | DOĞRU | Material Component 1.10.0 | |
Arat | 34 | Tümü | 34 | DOĞRU | Material Component 1.10.0 | |
Jetpack Animasyonları | Özel AndroidX köprü fragmanı | 34 | Tümü | 34 | DOĞRU | AndroidX Fragment 1.7 |
Özel AndroidX Geçişleri | 34 | Tümü | 34 | DOĞRU | AndroidX Geçişi 1.5 | |
Progress API Jetpack | 34 | Tümü | 34 | DOĞRU | AndroidX Activity 1.8 |
Ek Kaynaklar
- Tahmini geri kod örnekleri
- Sistem geri yükleme videosu ile ilgili temel bilgiler
- Android videolarının geleceğini inşa ediyoruz