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şen 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ının kısa bir örneği gösteriliyor.
- 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 tahmini geri hareket için özel animasyonlar geliştirmek üzere Predictive Back Progress API'lerini kullanabilirsiniz. Progress API'leri, görünümleri animasyonla hareketlendirmede faydalıdır ancak parçalar arasındaki geçişleri animasyonla hareketlendirmede 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 veya Material Component animasyonları tarafından sağlanan varsayılan animasyonlardan 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ı bekliyoruz. Ancak Android 14 Developer Preview 1 ve sonraki sürümlerde test edilebilecek 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 sonraki 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
beginDelayedTransition
yerineTransitionManager#controlDelayedTransition
kullanın. - Geçişi
handleOnBackStarted
içinde oluşturun. - Kullanıcının ne kadar geri kaydırdığını gösteren
BackEvent.progress
ilecurrentFraction
arasında ilişki kurarakhandleOnBackProgressed
içinde geri etkinliğiyle geçişi oynatın. - Kullanıcı
handleOnBackPressed
uygulamasında geri hareketini yaptıktan sonra geçişi tamamlayın. - Son olarak, geçişin durumunu
handleOnBackCancelled
içinde 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
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şleri, AndroidX geçişleriyle desteklenir ancak çerçeve geçişleriyle desteklenmez. Framework geçişlerinden uzaklaşın ve bunun yerine
Animator
ile 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.
handleOnBackStarted
içindeTransitionSeekController
değerinicontrolDelayedTransition
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'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.
Bunun nasıl çalışabileceğine dair bir örnek vermek için, geri 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:
- Etkinlik B'nin
onCreate
yönteminde açılış veya kapanış geçişlerini çağırın. - Kullanıcı B etkinliğine gittiğinde
OVERRIDE_TRANSITION_OPEN
kullanın. Kullanıcı, A etkinliğine geri dönmek için kaydırdığındaOVERRIDE_TRANSITION_CLOSE
kullanın. OVERRIDE_TRANSITION_CLOSE
belirtilirkenenterAnim
, A etkinliğinin giriş animasyonu,exitAnim
ise B etkinliğinin çıkış animasyonudur.
Parçalarla tahmin edilen geri gitme için destek 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 ya da 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 tahmini geri desteklerinin çoğu, Geçişlerin animasyonları arayabilmesine bağlıdı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
FragmentManager
veya 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, Tahmini Geri özelliğini destekler. Emin olmak için dokümanları kontrol edin.
Animator
sınıfı veAndroidX Transition
kitaplığı desteklenir.Animation
sınıfı veTransition
kitaplığı 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 gitme özelliğini kullanarak parçalar arası geçiş yapın:
- Gezinme bileşenine animasyon ekleme
setCustomAnimations
ile animasyon oluşturun.setEnterTransition
,setExitTransition
,setReenterTransition
vesetReturnTransition
ile giriş ve çıkış geçişlerine animasyon ekleyin.- Paylaşılan öğe geçişlerini
setSharedElementEnterTransition
vesetSharedElementReturnTransition
ile 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. Not: MaterialContainerTransform
, tahmini geri gitme özelliğini desteklemez.
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öremez. Tahmini geri gitme 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 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ı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 açıklanmaktadır.
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