Uygulamanızı zaten yeni sistem geri API'lerine taşıdıysanız uygulama içi animasyonları otomatik olarak almak için tahmine dayalı geri almayı seçebilir ve özel geçişleri de destekleyebilirsiniz.
Yerleşik uygulama içi animasyonlar için destek eklendi
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 ödemeyi destekleme hakkında daha fazla bilgi edinin.
Özel uygulama içi geçişler ve animasyonlar ekleme
İlerleme API'sini ve özel etkinlikler arası animasyonlar yöntemini overrideActivityTransition
kullanarak özel uygulama içi mülk animasyonları ve geçişleri oluşturabilirsiniz.
İlerleme API'sini kullanarak özel geçişler ekleme
AndroidX Activity 1.8.0-alpha01 veya sonraki sürümlerde, uygulamanızdaki tahmine dayalı geri hareketi için özel animasyonlar geliştirmek üzere Tahmine Dayalı Geri İlerleme API'larını kullanabilirsiniz. OnBackPressedCallback
içinde, kullanıcı geri kaydırırken nesneleri canlandırmak için handleOnBackProgressed
, handleOnBackCancelled
ve handleOnBackStarted
yöntemlerini kullanıma sunduk. Yeni sistem animasyonları veya Malzeme Bileşeni animasyonlarının sağladığı varsayılan animasyonlardan daha özel bir şeye ihtiyacınız varsa 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ğıdakilere dikkat edin:
- 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ümlerin yüklü olduğu cihazlarda desteklenir ve geriye dönük uyumluluğa sahip 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ı geri dönüşü desteklediğinden emin olmak 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.