Sistem geri API'lerini kullanırken uygulama içi animasyonlar almayı ve özel geçişleri desteklemeyi etkinleştirebilirsiniz.
Bu özellik etkinleştirildikten sonra uygulamanızda ana sayfaya dönüş, etkinlikler ve görevler arası etkinlikler için animasyonlar gösterilir.
Ayrıca, aşağıdaki gibi materyal bileşen animasyonlarını almak için malzeme bileşeni bağımlılığınızı MDC'nin v1.10.0 sürümüne yükseltebilirsiniz:
Daha fazla bilgi için GitHub'da malzeme bileşen geliştirici kılavuzuna bakın.
Bu videoda, Android Ayarları uygulaması kullanılarak çapraz etkinlik ve ana sayfaya dönüş için tahmine dayalı geri animasyonlara dair kısa bir örnek gösteriliyor.
- Kullanıcı animasyonda, önceki ayarlar ekranına dönmek için ekranı geri kaydırıyor. Bu ekran, etkinlikler arası animasyona örnek olarak gösterilebilir.
- Kullanıcı artık önceki ekranda ikinci bir kez geri kaydırmaya başlıyor ve ana ekranın duvar kağıdıyla birlikte önizlemesini gösteriyor. Bu önizleme, ana ekrana dönüş animasyonuna bir örnektir.
- Kullanıcı sağa kaydırmaya devam eder ve pencerenin küçülen animasyonunu ana ekrandaki simgeye kadar gösterir.
- 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
Tahmine dayalı geri hareketlerini kullanarak özel uygulama içi mülk animasyonları ve geçişleri, özel etkinlikler arası animasyonlar ve özel çapraz bölüm animasyonları oluşturabilirsiniz.
Progress API'yi kullanarak özel geçişler ekleme
AndroidX Activity 1.8.0-alfa01 veya sonraki sürümlerinde Tahmine Dayalı Geri İlerleme API'lerini kullanarak uygulamanızda tahmine dayalı geri hareketi
hareketi için özel animasyonlar geliştirebilirsiniz. İlerleme API'leri görünümler arasındaki geçişleri canlandırma konusunda sınırlamalara sahiptir. OnBackPressedCallback
'te, kullanıcı geri kaydırırken nesneleri canlandıracak 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ı bekleriz, ancak OnBackAnimationCallback
arayüzünde Android 14 Geliştirici Önizlemesi 1 ve sonraki sürümlerde test edilebilecek benzer platform API'leri de bulunur.
AndroidX Transitions ile İlerleme 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 Tahmine Dayalı Geri Geçiş geçişleri oluşturmak için 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. - Kullanıcının ne kadar geri kaydırdığını gösteren
currentFraction
ileBackEvent.progress
arasında bir tarih belirleyerekhandleOnBackProgressed
içinde geri etkinliğiyle geçişi oynatın. - Kullanıcı
handleOnBackPressed
uygulamasında geri hareketini uyguladıktan sonra geçişi tamamlayın. - Son olarak,
handleOnBackCancelled
içindeki geçişin durumunu sıfırlayın.
Aşağıdaki video, Kotlin kodu ve XML'de OnBackPressedCallback
ile uygulanmış iki kutu arasında özel bir geçiş gösterilmektedir:
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şleriyle desteklenmez. Çerçeve geçişlerinden uzaklaşmanızı öneririz.
- Tahmine dayalı geri geçişler, 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çindeTransitionSeekController
öğenizicontrolDelayedTransition
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 Tahmine Dayalı Geri'yi desteklediğinden emin olmak için overridePendingTransition
yerine overrideActivityTransition
kullanabilirsiniz. Bu, kullanıcı hızlıca geri kaydırırken geçiş
animasyonunun oynatıldığı anlamına gelir.
Bunun nasıl olabileceğine dair bir örnek vermek için, B etkinliğinin arka yığındaki A etkinliğinin en üstünde olduğu bir senaryo düşünün. Özel etkinlik animasyonlarını aşağıdaki şekilde işler:
- B Etkinliği'nin
onCreate
yöntemindeki 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 dönmek için ekranı kaydırdığındaOVERRIDE_TRANSITION_CLOSE
işlevini kullanın. OVERRIDE_TRANSITION_CLOSE
belirtilirken,enterAnim
A Etkinliği'nin giriş animasyonu,exitAnim
ise 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, animatör veya Androidx geçişlerinizi hareketle değiştirmek için ekranın kenarından kaydırmanıza olanak tanır. Hareketi bir eşiğin üzerine taşımanız, işlemin tamamlanıp önceki parçaya geri dönüp dönmeyeceğinizi veya iptal edilip geçerli parçada kalıp kalmayacağınızı belirler. Daha fazla bilgi için Animasyonları kullanarak parçalar arasında gezinme konusuna bakın.
Aşağıdaki faktörleri göz önünde bulundurun:
- Geçişler 1.5.0 veya sonraki sürümleri ve Parçalar 1.7.0 veya sonraki sürümleri içe aktarın. Parçalar'daki tahmine dayalı geri desteğinin çoğu, Geçişlerin animasyonları arama özelliğine dayanır. Bu da yalnızca 1.5.0 veya sonraki sürümlerde kullanılabilir.
- Arka yığını yönetmek için
FragmentManager
veya gezinme bileşeni ile Parçalar kullanın. Kendi arka yığınınızı yönetiyorsanız Tahmine Dayalı Geri desteklenmez. - Bazı kitaplıklarda Tahmine Dayalı Geri Dönme desteği bulunur. Emin olmak için belgeleri kontrol edin.
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.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.
MaterialFadeThrough
, MaterialSharedAxis
ve MaterialFade
dahil olmak üzere bazı materyal hareketler 1.12.02-alfa02 veya daha sonraki bir tarihten itibaren tahmin özelliğini destekler. MaterialContainerTransform
öğesinin tahmine dayalı geri almayı desteklemediğini unutmayın.
Geri çağırmaları kullan
Geri çağırmaları kullanarak çapraz parça geçişi oluşturabilirsiniz ancak kullanıcıların geri kaydırdığında önceki parçayı göremeyeceği, geri çağırma kullanılırken bilinen bir sınırlama vardır. Tahmine dayalı geri tasarım kılavuzuna karşılık gelen çapraz parçalar arası 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 gruplardan çıkın. Daha sonra, geri çağırmanın dışında setSharedElementReturnTransition
kullanarak paylaşılan öğe geçişini çalıştırın.
Daha fazla bilgi için GitHub'da kod örneğine bakı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 gereklilikleriyle ilgilidir.
Kategori | Animasyonlar | 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 | Animasyonlar | 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