Sisteme geri API'lerini kullanırken uygulama içi animasyonlar almayı ve özel geçişleri desteklemeyi etkinleştirebilirsiniz.
Bu özelliği etkinleştirdikten sonra uygulamanızda ana sayfaya geri gitme, etkinlikler arası geçiş ve görevler arası geçiş animasyonları gösterilir.
Ayrıca, aşağıdaki gibi materyal bileşen animasyonlarını almak için materyal bileşen bağımlılığınızı MDC Android'in 1.10.0 sürümüne yükseltebilirsiniz:
Daha fazla bilgi için GitHub'daki Material bileşeni geliştirici kılavuzuna bakın.
Videoda, Android Ayarlar uygulamasını kullanarak etkinlikler arası geçiş yapma ve ana sayfaya geri gitme için tahmin edilen geri gitme animasyonlarına dair kısa bir örnek gösterilmektedir.
- Animasyonda, kullanıcı önceki ayarlar ekranına dönmek için geri kaydırıyor. Bu, etkinlikler arası animasyon örneğidir.
- Şimdi önceki ekranda kullanıcı, ikinci kez geri kaydırmaya başlıyor ve ana ekranın duvar kağıdıyla birlikte önizlemesini gösteriyor. Bu, ana ekrana geri dönme animasyonunun bir örneğidir.
- Kullanıcı sağa kaydırmaya devam ediyor ve pencerenin ana ekrandaki simgeye küçüldüğünü gösteren bir animasyon gösteriliyor.
- Kullanıcı artık ana ekrana tamamen geri döndü.
Tahmini geri hareketleri için destek ekleme hakkında daha fazla bilgi edinin.
Özel uygulama içi geçişler ve animasyonlar ekleme
Özel uygulama içi özellik animasyonları ve geçişleri, özel etkinlikler arası animasyonlar ve özel parça animasyonları oluşturabilirsiniz. Ayrıca, tahmini geri hareketleri de kullanabilirsiniz.
Progress API'yi kullanarak özel geçişler ekleme
AndroidX Activity 1.8.0-alpha01 veya sonraki sürümlerde, uygulamanızda tahmin edilen geri gitme hareketi için özel animasyonlar geliştirmek üzere Predictive Back Progress API'lerini kullanabilirsiniz. Progress API'leri görünümleri animasyonlandırmada faydalıdır ancak parçalar arasındaki geçişleri animasyonlandırmada sınırlamaları vardır. OnBackPressedCallback içinde, kullanıcı geri kaydırırken nesneleri canlandırmak için
handleOnBackProgressed,
handleOnBackCancelled ve
handleOnBackStarted yöntemlerini kullanıma sunduk. Sistem tarafından sağlanan varsayılan animasyonlardan veya Material Component animasyonlarından daha fazla özelleştirme yapmanız gerekiyorsa bu yöntemleri kullanın.
Çoğu uygulamanın geriye dönük uyumlu AndroidX API'lerini kullanmasını bekliyoruz. Ancak Android 14 Developer Preview 1 ve sonraki sürümlerde test edilebilen OnBackAnimationCallback arayüzünde benzer platform API'leri de mevcuttur.
AndroidX Transitions ile Progress API'lerini kullanma
Progress API'leri, Android 14 ve sonraki sürümlerde AndroidX Transitions 1.5.0-alpha01 veya daha yeni sürümlerle birlikte kullanılarak Tahmini Geri Geçişleri oluşturulabilir.
- Kullanıcı geri kaydırdığında geçişleri oynatmak için
beginDelayedTransitionyerineTransitionManager#controlDelayedTransitionkullanın. - Geçişi
handleOnBackStartediçinde oluşturun. - Kullanıcının ne kadar geri kaydırdığını gösteren
BackEvent.progressilecurrentFractionilişkilendirerekhandleOnBackProgressediçinde geri etkinliğiyle geçişi oynatın. - Kullanıcı
handleOnBackPresseduygulamasında geri hareketini yaptıktan sonra geçişi tamamlayın. - Son olarak,
handleOnBackCancellediç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österir:
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şleriyle çalışırken aşağıdakileri göz önünde bulundurun:
- Geçişin Tahmini Geri'yi destekleyip desteklemediğini kontrol etmek için
isSeekingSupportedsimgesini kullanın. - Özel geçişleriniz için doğru değerini döndürmek üzere
isSeekingSupporteddeğerini geçersiz kılın. - Her animasyon için bir denetleyici oluşturun.
- Tahmini Geri geçişleri, AndroidX geçişleriyle desteklenir ancak çerçeve geçişleriyle desteklenmez. Çerçeve geçişlerinden uzaklaşın ve bunun yerine
Animatorile AndroidX geçişlerini kullanın. - Tahmini geri geçişleri, Android 14 ve sonraki sürümlerin yüklü olduğu cihazlarda desteklenir ve geriye dönük olarak uyumlu değildir.
- XML sahneleriyle oluşturulan geçişler de desteklenir.
handleOnBackStartediçindeTransitionSeekControllerdeğerinicontrolDelayedTransitionsonucu yerineTransitionManager.createSeekControllersonucuna 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'yi desteklemesini sağlamak için overridePendingTransition yerine overrideActivityTransition kullanabilirsiniz. Bu, kullanıcının geri kaydırmasıyla birlikte geçiş animasyonunun oynatılacağı anlamına gelir.
Bu durumun nasıl işleyebileceğine dair bir örnek vermek için, arka yığında B etkinliğinin A etkinliğinin üzerinde olduğu bir senaryo düşünün. Özel etkinlik animasyonlarını aşağıdaki şekilde işlersiniz:
- B Etkinliği'nin
onCreateyönteminde açılış veya kapanış geçişlerini çağırın. - Kullanıcı B etkinliğine gittiğinde
OVERRIDE_TRANSITION_OPENkullanın. Kullanıcı, A etkinliğine geri dönmek için kaydırdığındaOVERRIDE_TRANSITION_CLOSEkullanın. OVERRIDE_TRANSITION_CLOSEbelirtilirkenenterAnim, A etkinliğinin giriş animasyonu,exitAnimise B etkinliğinin çıkış animasyonudur.
Parçalarla tahmin edilen geri gitme desteği ekleme
Tahmin edilen geri gitme ö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şıyıp taşımadığınız, hareketin tamamlanıp tamamlanmayacağını ve önceki parçaya dönüp dönmeyeceğinizi veya hareketin iptal edilip edilmeyeceğini ve mevcut parçada kalıp kalmayacağınızı belirler. 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:
- Transitions 1.5.0 veya sonraki sürümleri ve Fragments 1.7.0 veya sonraki sürümleri içe aktarın. Fragment'lerdeki tahmin edilen geri gitme desteğinin büyük bir kısmı, animasyonlarda arama yapabilen Geçişler'e dayanır. Bu da 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
FragmentManagerveya Navigation Component ile birlikte Fragment'leri kullanın. Kendi geri yığını yönetiyorsanız Tahmini Geri Gitme desteklenmez.FragmentManager'nın bilmediği geri yığınlarından uzaklaşın. - Bazı kitaplıklar, Tahmin Edilen Geri Gitme özelliğini destekler. Emin olmak için dokümanları kontrol edin.
Animatorsınıfı veAndroidX Transitionkitaplığı desteklenir.Animationsınıfı veTransitionkitaplığı desteklenmez.- Tahmini animasyonlar yalnızca Android 14 veya sonraki sürümlerin yüklü olduğu cihazlarda çalışır.
Aşağıdaki durumlarda tahmini geri geçişler arası parçaları kullanın:
- Gezinme bileşenine animasyon ekleme
setCustomAnimationsile animasyon oluşturun.setEnterTransition,setExitTransition,setReenterTransitionvesetReturnTransitionile giriş ve çıkış geçişlerine animasyon ekleyin.- Paylaşılan öğe geçişlerini
setSharedElementEnterTransitionvesetSharedElementReturnTransitionile canlandırın.
Materyal hareketlerinden bazıları, MaterialFadeThrough, MaterialSharedAxis ve MaterialFade dahil olmak üzere 1.12.02-alpha02 veya sonraki sürümlerde tahmini geri özelliğini destekler.
Geri aramaları kullanma
Geri çağırmaları kullanarak parçalar arası geçiş oluşturabilirsiniz. Ancak geri çağırmaları kullanırken bilinen bir sınırlama vardır. Bu sınırlama nedeniyle kullanıcılar, geri kaydırdıklarında önceki parçayı göremezler. Tahmini geri tasarım kılavuzuna karşılık gelen, parçalar arası ortak öğe geçişi oluşturmak için aşağıdakileri yapın:
OnBackPressedCallback oluşturun. handleOnBackProgressed içinde parçayı ölçeklendirin ve kaydırın. Ardından, arka yığından çıkarın. Ardından, geri çağırma 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ılıklar, manifest işaretleri ve parça işaretleri tarafından neyin kontrol edildiğini anlamak için aşağıdaki tabloyu kullanın. Bu tabloda kod gereksinimleri belirtilmektedir.
| Kategori | Animasyon | compileSdk | targetSdk | Cihaz sürümü | android:enableOnBackInvokedCallback | Bağımlılık |
|---|---|---|---|---|---|---|
| Sistem Animasyonları | Ana sayfaya dönme | 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 etkinlikler arası | 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 Animations | Özel AndroidX fragmentler arası geçiş | 34 | Tümü | 34 | DOĞRU | AndroidX Fragment 1.7 |
| Özel AndroidX Geçişleri | 34 | Tümü | 34 | DOĞRU | AndroidX Transition 1.5 | |
| Progress API Jetpack | 34 | Tümü | 34 | DOĞRU | AndroidX Activity 1.8 |
Ek Kaynaklar
- Tahmini geri kod örnekleri
- Sistemi yedekleme videosuyla ilgili temel bilgiler
- Android video'nun geleceği için geliştirme