Uygulamanızı yeni sistem geri API'lerine taşıdıysanız uygulama içi animasyonları otomatik olarak almak ve özel geçişleri desteklemek için tahmini geri özelliğini etkinleştirebilirsiniz.
Yerleşik uygulama içi animasyonlar için destek ekleme
Bu özelliği etkinleştirdikten sonra uygulamanız, ana ekrana dönme, etkinlik ve görevler arası geçiş animasyonlarını gösterir.
Aşağıdaki gibi materyal bileşen animasyonlarını almak için materyal bileşeni bağımlılığınızı MDC Android'in 1.10.0 sürümüne de yükseltebilirsiniz:
Daha fazla bilgi için GitHub'daki materyal bileşeni geliştirici kılavuzuna bakın.
Bu videoda, şunun için tahmini geri animasyonlara dair kısa bir örnek çapraz etkinlik ve ana sayfaya geri dönme özelliklerini kullanabilirsiniz.
- Kullanıcı animasyonda önceki ayarlara dönmek için ekranı geri kaydırır ekranı gibi gösterilir.
- Kullanıcı, önceki ekranda ikinci kez geri kaydırmaya başlar. Bu sırada, ana ekranın duvar kağıdıyla birlikte önizlemesi gösterilir. Bu, ana ekrana geri dönme animasyonuna örnektir.
- Kullanıcı, ekranı sağa kaydırmaya devam ederek pencerenin animasyonu gösterilir ana ekrandaki simgeye küçültülür.
- Kullanıcı artık ana ekrana tamamen geri döndü.
Tahmini geri ödemeyi destekleme 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şturmak için
Progress API ve özel etkinlikler arası animasyonlar yöntemi
overrideActivityTransition
Progress API'yi kullanarak özel geçişler ekleme
AndroidX Activity 1.8.0-alpha01 veya sonraki sürümlerde, uygulamanızda tahmini geri hareketi için özel animasyonlar geliştirmek üzere Tahmini Geri İlerleme API'lerini kullanabilirsiniz. OnBackPressedCallback
sürümünde, kullanıcı geri kaydırırken nesneleri canlandırmak için handleOnBackProgressed
, handleOnBackCancelled
ve handleOnBackStarted
yöntemlerini kullanıma sunduk. Tekliflerinizi otomatikleştirmek ve optimize etmek için
varsayılan animasyonlardan daha özel bir şeye ihtiyacınız varsa bu yöntemleri kullanabilirsiniz.
yeni sistem animasyonları veya Malzeme Bileşeni animasyonları tarafından sağlanan şemadır.
Çoğu uygulamanın geriye dönük uyumlu AndroidX API'lerini kullanmasını bekleriz. Bununla birlikte, Android 14 Geliştirici Önizlemesi 1 ve sonraki sürümlerde test edebileceğiniz OnBackAnimationCallback
arayüzünde benzer platform API'leri de vardır.
AndroidX geçişleriyle Progress API'leri kullanma
İlerleme API'leri, Android 14 ve sonraki sürümlerde Tahmini Geri geçişleri oluşturmak için AndroidX Geçişler 1.5.0-alpha01 veya sonraki sürümlerle kullanılabilir.
- 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. - 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ı
handleOnBackPressed
'te geri hareketini tamamladıktan 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>
Tahmini Geri geçiş geçişleriyle çalışırken aşağıdakilere dikkat edin:
- Geçişin Tahmini Geri özelliğini destekleyip desteklemediğini kontrol etmek için
isSeekingSupported
simgesini kullanın. - Özel geçişlerinizin doğru değerine döndürülmesi için
isSeekingSupported
değerini geçersiz kılın. - Her animasyon için 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.
- Tahmini Geri geçişleri Android 14 ve sonraki sürümlerde desteklenir ve geriye dönük uyumlu değildir.
- XML sahneleriyle oluşturulan geçişler de desteklenir. İçinde
handleOnBackStarted
,TransitionSeekController
metriğinizi bu sonuç için ayarlayın Şunun sonucu yerineTransitionManager.createSeekController
:controlDelayedTransition
.
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 özelliğini desteklemesini sağlamak için overridePendingTransition
yerine overrideActivityTransition
kullanabilirsiniz. Bu, kullanıcı geri kaydırdığı sırada geçiş animasyonunun oynatılacağı anlamına gelir.
Bunun nasıl işleyebileceğine dair bir örnek vermek için arka yığınta B etkinliğinin A etkinliğinin üzerinde olduğu bir senaryo düşünün. Özel etkinlik animasyonları aşağıdaki şekilde ele alınır:
- B Etkinliği'nin
onCreate
içinde açma veya kapatma geçişlerini çağırın yöntemidir. - Kullanıcı B etkinliğine gittiğinde
OVERRIDE_TRANSITION_OPEN
değerini kullanın. Kullanıcı A etkinliğine geri gitmek için ekranı kaydırdığındaOVERRIDE_TRANSITION_CLOSE
öğesini kullanın. OVERRIDE_TRANSITION_CLOSE
belirtilirkenenterAnim
, A Etkinliği'nin animasyonu girin veexitAnim
, B Etkinliği'nin çıkış animasyonudur.