Sistem geri API'lerini kullanırken uygulama içi animasyonlar almayı tercih edebilir ve destekler.
Etkinleştirildikten sonra uygulamanızda ana sayfaya geri dönüş, çapraz etkinlik, etkinlik sonu yeni bir beceridir.
Malzeme bileşeni bağımlılığınızı MDC'nin v1.10.0 sürümüne de yükseltebilirsiniz Aşağıdaki gibi malzeme bileşeni animasyonları almak için Android:
GitHub'daki malzeme bileşen geliştirici kılavuzuna bakın. daha fazla bilgi edinin.
Bu videoda, şunun için tahmini geri animasyonlara dair kısa bir örnek çapraz etkinlik ve ana sayfaya geri dönme özelliklerini kullanabilirsiniz.
- Animasyonda kullanıcı önceki ayarlara dönmek için ekranı geri kaydırıyor ekranı gibi gösterilir.
- Önceki ekranda kullanıcı ikinci bir kez geri kaydırmaya başlıyor. Duvar kağıdıyla birlikte ana ekranın bir önizlemesini gösteriyor. Örneğin, ana ekrana dönüş animasyonunu oluşturur.
- Kullanıcı, ekranı sağa kaydırmaya devam ederek pencerenin animasyonu gösterilir ana ekrandaki simgeye küçültülür.
- Kullanıcı tamamen ana ekrana döndü.
Tahmine dayalı 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 mülk animasyonları ve geçişleri oluşturabilirsiniz. etkinlikler arası animasyonlar ve tahmine dayalı özel çapraz parça animasyonları geri hareketleri.
Progress API'yi kullanarak özel geçişler ekleme
AndroidX Etkinliği 1.8.0-alpha01 veya sonraki sürümlerde Tahmine Dayalı Geri gitme
Şunun için özel animasyonlar geliştirmek için ilerleme API'leri:
tahmine dayalı geri hareketini etkinleştirin. Progress API'leri, animasyon oluşturmak için
görünümlerinin yanı sıra parçalar arasındaki geçişleri canlandırırken de sınırlamaları vardır. Şu süre içinde:
OnBackPressedCallback
proje yaşam döngüsünü
handleOnBackProgressed
,
handleOnBackCancelled
ve
handleOnBackStarted
Kullanıcı geri kaydırırken nesnelere animasyon eklemek için bir yöntem kullanabilir. Aşağıdaki durumlarda bu yöntemleri kullanın:
sistem tarafından sağlanan varsayılan animasyonlardan daha fazlasının özelleştirilmesi gerekiyorsa veya
animasyonları gibi.
Çoğu uygulamanın, geriye dönük uyumlu AndroidX API'lerini kullanmasını bekliyoruz, ancak
içindeki benzer platform API'leri
OnBackAnimationCallback
arayüz, Android 14 Geliştirici Önizlemesi 1 ve sonraki sürümlerde test edilebilir.
AndroidX Transitions ile İlerleme API'lerini kullanma
Progress API'leri, AndroidX Transitions 1.5.0-alpha01 veya sonraki sürümlerle kullanılabilir kullanarak Tahmine Dayalı Geri Geçişleri oluşturabilirsiniz.
- Bunun yerine
TransitionManager#controlDelayedTransition
kullan Geçişleri şu şekilde oynatmak içinbeginDelayedTransition
: Kullanıcı geri kaydırır. - Geçişi
handleOnBackStarted
içinde oluşturun. - Geçişi,
handleOnBackProgressed
içinde önceki etkinliğiyle birlikte oynatın.currentFraction
ileBackEvent.progress
arasındaki ilişki, ne kadar uzak olduğunu Kullanıcı geri kaydırır. - Kullanıcı geri hareketini uyguladıktan sonra geçişi tamamlayın
handleOnBackPressed
- Son olarak,
handleOnBackCancelled
içindeki geçişin durumunu sıfırlayın.
Aşağıdaki video, Kotlin kodu ve XML'de özel bir geçiş gösterilmiştir
OnBackPressedCallback
ile uygulanan iki kutu arasında şunlar vardır:
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ş geçişleriyle çalışırken aşağıdakileri göz önünde bulundurun:
- Geçişin Tahmine Dayalı Geri'yi destekleyip desteklemediğini kontrol etmek için
isSeekingSupported
öğesini kullanın. - Özel geçişlerinizin doğru değerine döndürülmesi için
isSeekingSupported
değerini geçersiz kılın. - Animasyon başına bir denetleyici oluşturun.
- Tahmine dayalı geri geçişler, AndroidX geçişlerinde desteklenir. ancak çerçeve geçişlerinde geçerli değil. Çerçeveden başka bir sisteme geçiş yapmanızı öneririz oluşturabilirsiniz.
- Tahmine dayalı geri geçişler, Android 14 ve sonraki sürümleri çalıştıran cihazlarda desteklenir. daha yüksek olduğu ve geriye dönük uyumlu olmadığı anlamına gelir.
- XML sahneleriyle oluşturulan geçişler de desteklenir. İçinde
handleOnBackStarted
,TransitionSeekController
metriğinizi bu sonuç için ayarlayın Şunun sonucu:TransitionManager.createSeekController
controlDelayedTransition
.
Android 14 ve sonraki sürümlerde özel etkinlik geçişleri ekleme
Özel etkinlik geçişlerinin Android 14'te tahmine dayalı geri gitmeyi desteklediğinden emin olmak için
ve daha yüksek bir sayı için şunun yerine overrideActivityTransition
kullanabilirsiniz:
overridePendingTransition
. Bu, geçiş animasyonunun
Kullanıcı geri kaydırır.
Bunun nasıl olabileceğine dair bir örnek vermek için, B Etkinliği, arka yığındaki A Etkinliği'nin en üstündedir. Özel URL'ler, Etkinlik animasyonları aşağıdaki şekildedir:
- B Etkinliği'nin
onCreate
içinde açma veya kapatma geçişlerini çağırın yöntemidir. - Kullanıcı B Etkinliği'ne gittiğinde
OVERRIDE_TRANSITION_OPEN
işlevini kullanın. Zaman Kullanıcı A Etkinliği'ne dönmek için kaydırır,OVERRIDE_TRANSITION_CLOSE
OVERRIDE_TRANSITION_CLOSE
belirtilirkenenterAnim
, A Etkinliği'nin animasyonu girin veexitAnim
, B Etkinliği'nin çıkış animasyonudur.
Parçalı Tahmine Dayalı Geri Dönme desteği ekle
Tahmine Dayalı Geri'yi parçalarla uygularken iki yaklaşım vardır.
Mevcut API'leri kullan
Mevcut API'leri kullanmanızı öneririz. Bu API'ler, sayfayı kaydırarak Animator veya Androidx geçişlerinizi hareketi yapın. Hareketin eşiğin dışına taşınıp taşınmaması, geri dönerseniz ya da önceki parçaya geri dönerseniz mevcut parçada kalır. Daha fazla bilgi için bkz. Animasyonları kullanarak parçalar arasında gezinin.
Aşağıdaki faktörleri göz önünde bulundurun:
- İçe aktarma Transitions 1.5.0 veya sonraki sürümler ve Parçalar 1.7.0 veya daha sonra. Fragments'taki tahmine dayalı arka desteğin çoğu Animasyonları arayabilen geçişler (yalnızca Geçişler 1.5.0 veya sonraki sürümler.
FragmentManager
veya Arka yığını işleyecek Gezinme Bileşeni. Tahmini Kendi arka yığınınızı siz yönetiyorsanız geri özelliği desteklenmez.- Bazı kitaplıklarda Tahmine Dayalı Geri Dönme desteği bulunur. Dokümanları kontrol edin elbette.
Animator
sınıfı veAndroidX Transition
kitaplığı desteklenir.Animation
sınıfı veTransition
çerçevesi kitaplığı desteklenmiyor.- Tahmine dayalı animasyonlar yalnızca Android 14 veya sonraki sürümleri çalıştıran cihazlarda çalışır.
Aşağıdaki durumlarda tahmini arka çapraz parçaları kullanın:
- Gezinme bileşenine animasyon ekleyin.
setCustomAnimations
ile animasyon ekleyin.- Giriş ve çıkış geçişlerini
setEnterTransition
ile canlandırın,setExitTransition
,setReenterTransition
vesetReturnTransition
- Paylaşılan öğe geçişlerini
setSharedElementEnterTransition
vesetSharedElementReturnTransition
.
Bazı materyal hareketler
şu andan itibaren tahmine dayalı geri ödemeyi
1.12.02-alfa02
veya daha yüksek, MaterialFadeThrough
, MaterialSharedAxis
ve
MaterialFade
. MaterialContainerTransform
adlı operatörün tahmin özelliğini desteklemediğini unutmayın
geri dönüyor.
Geri çağırmaları kullan
Geri çağırma işlevleri kullanarak çapraz parça geçişi oluşturabilirsiniz ancak kullanıcıların önceki arama verilerini göremediği geri çağırmaların kullanımıyla ilgili bilinen sınırlama, parçasına sahip oluyor. Çapraz parçalı paylaşılan öğe geçişi oluşturmak için tahmine dayalı geri dönüşe karşılık gelen tasarım kılavuzundan yararlanabilirsiniz. takip etmek için:
OnBackPressedCallback
oluşturun. handleOnBackProgressed
içinde ölçeklendirin ve
ve parçayı kaydırın. Sonra da arkadaki gruplardan çıkın. Ardından, paylaşılan öğeyi çalıştırın
geri çağırma dışında setSharedElementReturnTransition
kullanarak geçiş yapın.
Daha fazla bilgi için GitHub'da kod örneğine bakın.
Gereksinimler
Geliştirici seçenekleri tarafından nelerin kontrol edildiğini anlamak için aşağıdaki tablolardan
targetSdkVersion
ve compileSdkVersion
, cihaz sürümü, bağımlılıklar,
parça işaretleri için de geçerlidir. İlk tablo, kod gereklilikleriyle ilgilidir.
Kategori | Animasyon | derleme SDK'sı | hedef SDK | android:enableOnBackInvokedCallback | Bağımlılık |
---|---|---|---|---|---|
Sistem Animasyonları | Ana sayfaya dönüş | 33 | Tümü | DOĞRU | Yok |
Çapraz etkinlikler | 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çası 1.7 |
Özel AndroidX Geçişleri | 34 | Tümü | DOĞRU | AndroidX Geçişi 1.5 | |
İlerleme API'si Jetpack | 34 | Tümü | DOĞRU | AndroidX Etkinlik 1.8 |
Aşağıdaki tabloda, kullanıcıların animasyonları görmesine izin veren gereksinimler açıklanmaktadır.
Kategori | Animasyon | Geliştirici Seçeneği etkin | Cihaz sürümü |
---|---|---|---|
Sistem Animasyonları | Ana sayfaya dönüş | DOĞRU | 33 |
Çapraz etkinlikler | 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'si Jetpack | YANLIŞ | 34 |
Ek Kaynaklar
- Tahmine dayalı geri kod örnekleri
- Sistem geri videosuyla ilgili temel bilgiler
- Android'in geleceğine hazırlık videosu