Tahmine dayalı geri animasyonlar için destek eklendi

Sisteme geri API'lerini kullanırken uygulama içi animasyonlar almayı ve özel geçişleri desteklemeyi seçebilirsiniz.

Video 1: Tahmin edilen geri gitme animasyonları

Bu özelliği etkinleştirdikten sonra uygulamanızda ana sayfaya geri gitme, etkinlikler arası geçiş ve görevler arası geçiş animasyonları gösterilir.

Videoda, Android Ayarlar uygulamasını kullanarak etkinlikler arası geçiş yapma ve ana sayfaya geri gitme için tahmin edilen geri gitme animasyonlarına dair kısa bir örnek gösterilmektedir.

  1. Animasyonda, kullanıcı önceki ayarlar ekranına dönmek için geri kaydırıyor. Bu, etkinlikler arası animasyon örneğidir.
  2. Şimdi önceki ekranda kullanıcı, ikinci kez geri kaydırmaya başlıyor ve ana ekranın duvar kağıdıyla birlikte önizlemesini gösteriyor. Bu, ana ekrana geri dönme animasyonunun bir örneğidir.
  3. Kullanıcı sağa kaydırmaya devam ediyor ve pencerenin ana ekrandaki simgeye küçüldüğünü gösteren bir animasyon gösteriliyor.
  4. Kullanıcı artık ana ekrana tamamen geri döndü.

Tahmini 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 özellik animasyonları ve geçişleri, özel etkinlikler arası animasyonlar ve özel tahminli geri hareketleriyle özel parçalar arası animasyonlar oluşturabilirsiniz.

Jetpack Compose'da özel geçişler ekleme

Özel uygulama içi geçişler oluşturmak için Jetpack Compose'da tahmini geri hareketlerini işlemek üzere PredictiveBackHandler kullanabilirsiniz. Bu özellik, androidx.activity:activity-compose:1.8.0-alpha01 veya sonraki sürümlerde kullanılabilir.

PredictiveBackHandler, kullanıcının kenardan geriye doğru kaydırmasıyla etkinlikleri yayan bir Flow<BackEventCompat> geri çağırma lambda'sı sağlar. Bu etkinlikler, kullanıcı dokunma konumu, kaydırma kenarı ve en önemlisi progress hakkında bilgi sağlar. Bu bilgiler, geri hareketini işleme sürecinde bileşenleri animasyonla uzaklaştırmak için kullanılabilir.

Aşağıdaki snippet'te, PredictiveBackHandler kullanarak Surface öğesini ölçeklendirme ve hareket ilerlemesiyle uzaklaştırma animasyonu örneği gösterilmektedir:

@Composable
fun DetailScreen(onBack: () -> Unit) {
    var scale by remember { mutableFloatStateOf(1f) }
    var xOffset by remember { mutableFloatStateOf(0f) }
    val scope = rememberCoroutineScope()

    PredictiveBackHandler { progressFlow ->
        try {
            progressFlow.collectLatest { backEvent ->
                scale = 1f - backEvent.progress
                xOffset = backEvent.progress * 100f
            }
            // User completed gesture
            onBack()
        } catch (e: CancellationException) {
            // User cancelled gesture
            // Animate scale and xOffset back to 1f and 0f respectively
            scope.launch {
                animate(scale, 1f) { value, _ -> scale = value }
            }
            scope.launch {
                animate(xOffset, 0f) { value, _ -> xOffset = value }
            }
        }
    }
    Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
        Surface(
            modifier = Modifier
                .size(200.dp)
                .scale(scale)
                .offset(x = xOffset.dp, y = 0.dp),
            color = Color.Blue
        ) {}
    }
}