Sistem geri API'larını kullanırken uygulama içi animasyonlar almayı tercih edebilir ve özel geçişleri destekleyebilirsiniz.
Kaydolduktan sonra uygulamanızda ana sayfaya geri dönme, çapraz etkinlik ve görevler arası animasyonlar gösterilir.
Aşağıdaki gibi materyal bileşeni animasyonları almak için malzeme bileşeni bağımlılığınızı MDC Android'in 1.10.0 sürümüne de geçirebilirsiniz:
Daha fazla bilgi için GitHub'daki malzeme bileşeni geliştirici kılavuzuna bakın.
Videoda, Android Ayarları uygulaması kullanılarak çapraz etkinlik ve eve dönüş için tahmine dayalı geri animasyonlara dair kısa bir örnek gösterilmektedir.
- Animasyonda, kullanıcı geri kaydırarak önceki ayarlar ekranına (bir çapraz etkinlik animasyonu örneği) geri döner.
- Önceki ekranda kullanıcı ikinci bir kez geri kaydırmaya başlar. Ana ekranın, duvar kağıdıyla birlikte bir önizlemesini (ana sayfaya geri dönüş animasyonu örneği) gösterir.
- Kullanıcı, ekranı sağa kaydırmaya devam eder ve ana ekrandaki simgeye küçülen pencerenin animasyonu gösterilir.
- Kullanıcı artık tamamen ana ekrana dönmüştür.
Tahmine dayalı geri hareketleri için destek ekleme hakkında daha fazla bilgi edinin.
Özel uygulama içi geçişler ve animasyonlar ekleme
Tahmine dayalı geri hareketleriyle özel uygulama içi mülk animasyonları ve geçişleri, özel etkinlik arası animasyonlar ve özel çapraz parça animasyonlar oluşturabilirsiniz.
İlerleme API'sini kullanarak özel geçişler ekleme
AndroidX Activity 1.8.0-alpha01 veya sonraki sürümlerle, uygulamanızdaki tahmine dayalı geri hareketi için özel animasyonlar geliştirmek üzere Tahmine Dayalı Geri İlerleme API'larını kullanabilirsiniz. İlerleme API'ları görünümleri canlandırmada yardımcı olur ancak parçalar arasındaki geçişleri canlandırırken sınırlamalara sahiptir. 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 Malzeme 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ı bekliyoruz ancak OnBackAnimationCallback
arayüzünde Android 14 Developer Preview 1 ve sonraki sürümlerde test etmek için benzer platform API'leri de vardır.
İlerleme API'larını AndroidX Transitions ile kullanma
İlerleme API'leri, Tahmine Dayalı Geri Geçişleri oluşturmak için Android 14 ve sonraki sürümlerde AndroidX Transitions 1.5.0-alpha01 veya sonraki sürümlerde kullanılabilir.
- Kullanıcı geri kaydırırken geçişleri oynatmak için
beginDelayedTransition
yerineTransitionManager#controlDelayedTransition
kullanın. - Geçişi
handleOnBackStarted
içinde oluşturun. currentFraction
ileBackEvent.progress
arasında ilişki kurarakhandleOnBackProgressed
içinde geri etkinliğiyle geçişi oynatın. Bu, kullanıcının ne kadar geri kaydırdığını gösterir.- Kullanıcı
handleOnBackPressed
ürününde geri hareketini gerçekleştirdikten 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>
Tahmine Dayalı Geri Geçişleriyle çalışırken aşağıdakileri göz önünde bulundurun:
- Geçişin Tahmini Geriye Dönük özelliğini destekleyip desteklemediğini kontrol etmek için
isSeekingSupported
öğesini kullanın. - Özel geçişlerinizde "doğru" değerini alması için
isSeekingSupported
değerini geçersiz kılın. - Animasyon başına bir denetleyici oluşturun.
- Tahmine Dayalı Geri Geçişleri, AndroidX geçişlerinde desteklenir ancak çerçeve geçişleriyle desteklenmez. Çerçeve geçişlerinden uzaklaşmanızı öneririz.
- Tahmine Dayalı Geri geçişleri, Android 14 ve sonraki sürümleri çalıştıran cihazlarda desteklenir ancak geriye dönük uyumlu değildir.
- XML sahneleriyle oluşturulan geçişler de desteklenir.
handleOnBackStarted
içindeTransitionSeekController
özelliğinicontrolDelayedTransition
yerineTransitionManager.createSeekController
sonucu olarak 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 Tahmine Dayalı Geriyi desteklemesini sağlamak için overridePendingTransition
yerine overrideActivityTransition
kullanabilirsiniz. Bu, kullanıcı hızlıca geri kaydırırken
geçiş animasyonunun oynatılacağı anlamına gelir.
Bunun nasıl işlediğine dair bir örnek vermek için B etkinliğinin arka yığında A etkinliğinin üstünde olduğu bir senaryo düşünün. Özel Etkinlik animasyonlarını aşağıdaki şekilde işlersiniz:
- B Etkinliğinin
onCreate
yönteminde açılış veya kapanış geçişlerini çağırın. - Kullanıcı B Etkinliği'ne gittiğinde
OVERRIDE_TRANSITION_OPEN
işlevini kullanın. Kullanıcı A Etkinliği'ne geri dönmek için ekranı kaydırdığındaOVERRIDE_TRANSITION_CLOSE
özelliğini kullanın. OVERRIDE_TRANSITION_CLOSE
belirtilirkenenterAnim
, A Etkinliğinin giriş animasyonu veexitAnim
, B Etkinliğinin çıkış animasyonudur.
Parçalı Tahmini Geri için destek ekleme
Tahmine dayalı geri yükleme özelliğini parçalarla uygularken iki yaklaşımdan yararlanabilirsiniz.
Mevcut API'leri kullan
Mevcut API'leri kullanmanızı öneririz. Bu API'ler, hareketle Animator veya Androidx geçişlerinizi değiştirmek için ekranın kenarından hızlıca kaydırmanıza olanak tanır. Hareketi bir eşiği geçtikten sonra taşımanız, tamamlanıp önceki parçaya geri dönmeniz veya hareketin iptal edilip mevcut parçada kalacağınız anlamına gelir. Daha fazla bilgi için Animasyonları kullanarak parçalar arasında gezinme bölümüne bakın.
Aşağıdaki faktörleri göz önünde bulundurun:
- Transitions 1.5.0 veya sonraki sürümler ve Fragments 1.7.0 veya sonraki sürümler. Fragments içindeki tahmine dayalı geri desteğin çoğu, Geçişlerin animasyonları arama özelliğine dayanır. Bu işlem yalnızca Geçiş 1.5.0 veya sonraki sürümlerde mümkündür.
- Arka yığını işlemek için
FragmentManager
veya Gezinme Bileşeni ile birlikte Fragment'ları kullanın. Kendi arka yığınınızı yönetiyorsanız Tahmine Dayalı Geri özelliği desteklenmez. - Bazı kitaplıklarda Predictive Back desteği bulunur. Emin olmak için belgeleri inceleyin.
Animator
sınıfı veAndroidX Transition
kitaplığı desteklenir.Animation
sınıfı ve çerçeveTransition
kitaplığı desteklenmiyor.- Tahmine dayalı animasyonlar yalnızca Android 14 veya sonraki sürümleri çalıştıran cihazlarda çalışır.
Aşağıdaki durumlarda tahmine dayalı geri çapraz parçaları kullanın:
- Gezinme bileşenini canlandırın.
setCustomAnimations
ile animasyon oluşturun.setEnterTransition
,setExitTransition
,setReenterTransition
vesetReturnTransition
ile giriş ve çıkış geçişlerini canlandırın.setSharedElementEnterTransition
vesetSharedElementReturnTransition
ile paylaşılan öğe geçişlerini canlandırın.
MaterialFadeThrough
, MaterialSharedAxis
ve MaterialFade
dahil olmak üzere bazı materyal hareketler 1.12.02-alpha02 veya sonraki sürümlerde tahmine dayalı geri dönüşü destekler. MaterialContainerTransform
hizmetinin tahmine dayalı geri dönüşü desteklemediğini unutmayın.
Geri çağırmaları kullanma
Geri çağırmaları kullanarak çapraz parça geçiş oluşturabilirsiniz ancak geri çağırma kullanılırken kullanıcıların geri kaydırdıklarında önceki parçayı göremediği bilinen bir sınırlama vardır. Tahmine dayalı geri tasarım kılavuzuna karşılık gelen bir çapraz parça paylaşılan öğ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. Sonra da arkadaki gruptan fırlatı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 göz atın.
Gereksinimler
Geliştirici seçenekleri, targetSdkVersion
ve compileSdkVersion
, cihaz sürümü, bağımlılıklar, manifest işaretleri ve parça işaretleri tarafından nelerin kontrol edildiğini anlamak için aşağıdaki tablolardan yararlanın. İlk tablo kod gereksinimlerine yöneliktir.
Kategori | Animasyonlar | derleme Sdk | hedef SDK | android:enableOnBackInvokedCallback | Bağımlılık |
---|---|---|---|---|---|
Sistem Animasyonları | Ana Sayfaya Dönüş | 33 | Tümü | DOĞRU | Yok |
Çapraz etkinlik | 34 | Tümü | DOĞRU | Yok | |
Çapraz görev | 34 | Tümü | DOĞRU | Yok | |
Platform | Özel çapraz etkinlik | 34 | Tümü | DOĞRU | Yok |
İlerleme API Platformu | 34 | Tümü | DOĞRU | Yok | |
Material Bileşenleri | Alt Sayfa | 34 | Tümü | DOĞRU | Malzeme Bileşeni 1.10.0 |
Yan Sayfa | 34 | Tümü | DOĞRU | Malzeme Bileşeni 1.10.0 | |
Gezinme Çekmecesi | 34 | Tümü | DOĞRU | Malzeme Bileşeni 1.10.0 | |
Arama | 34 | Tümü | DOĞRU | Malzeme Bileşeni 1.10.0 | |
Jetpack Animasyonları | Özel AndroidX çapraz parçası | 34 | Tümü | DOĞRU | AndroidX Parça 1.7 |
Özel AndroidX Geçişleri | 34 | Tümü | DOĞRU | AndroidX Geçişi 1.5 | |
İlerleme API'sı Jetpack | 34 | Tümü | DOĞRU | AndroidX Etkinliği 1.8 |
Aşağıdaki tabloda, kullanıcıların animasyonları görmesine izin veren koşullar belirtilmiştir.
Kategori | Animasyonlar | Geliştirici Seçeneği etkin | Cihaz sürümü |
---|---|---|---|
Sistem Animasyonları | Ana Sayfaya Dönüş | DOĞRU | 33 |
Çapraz etkinlik | DOĞRU | 34 | |
Çapraz görev | DOĞRU | 34 | |
Platform | Özel çapraz etkinlik | DOĞRU | 34 |
İlerleme API Platformu | YANLIŞ | 34 | |
Material Bileşenleri | Alt Sayfa | YANLIŞ | 34 |
Yan Sayfa | YANLIŞ | 34 | |
Gezinme Çekmecesi | YANLIŞ | 34 | |
Arama | YANLIŞ | 34 | |
Jetpack Animasyonları | Özel AndroidX çapraz parçası | YANLIŞ | 34 |
Özel AndroidX Geçişleri | YANLIŞ | 34 | |
İlerleme API'sı Jetpack | YANLIŞ | 34 |
Ek Kaynaklar
- Tahmine dayalı geri kodu örnekleri
- Sistem geri videosu için temel bilgiler
- Android videolarının geleceğine hazırlanma