Tahmine dayalı geri animasyonlar için destek eklendi

Sistem 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ız ana sayfaya geri gitme, etkinlikler arası geçiş ve görevler arası geçiş için animasyonlar gösterir.

Videoda, Android Ayarlar uygulaması kullanılarak etkinlikler arası ve ana sayfaya geri gitme için tahmin edilen geri gitme animasyonlarının kısa bir örneği gösteriliyor.

  1. Animasyonda, kullanıcı önceki ayarlar ekranına dönmek için geri kaydırır. Bu, etkinlikler arası animasyona bir örnektir.
  2. Kullanıcı önceki ekranda ikinci kez geri kaydırma hareketi yapıyor. Bu kez ana ekranın duvar kağıdıyla birlikte önizlemesi gösteriliyor. Bu, ana ekrana dönme animasyonuna bir örnek.
  3. Kullanıcı sağa kaydırmaya devam eder ve pencerenin ana ekrandaki simgeye küçüldüğünü gösteren bir animasyon gösterilir.
  4. Kullanıcı artık tamamen ana ekrana dönmüştür.

Tahmin edilen geri gitme hareketi için destek ekleme hakkında daha fazla bilgi edinin.

Özel uygulama içi geçişler ve animasyonlar ekleme

Oluşturma veya Görünümler'i kullanarak tahmin edilen geri gitme hareketleriyle özel uygulama içi özellik animasyonları ve geçişleri, özel etkinlikler arası animasyonlar ve özel parçalar arası animasyonlar oluşturabilirsiniz. Görünümler'i kullanarak geçiş oluşturmayı öğrenmek için Görünümler'de tahmin edilen geri gitme animasyonları için destek ekleme başlıklı makaleyi inceleyin.

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

Özel uygulama içi geçişler oluşturmak için Jetpack Compose'da tahmin edilen geri gitme 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ı kenardan geri kaydırdığında etkinlikleri tetikleyen bir Flow<BackEventCompat> sunan geri çağırma lambda'sı sağlar. Bu etkinlikler; kullanıcının dokunma konumu, kaydırma kenarı ve en önemlisi progress hakkında bilgi sağlar. Bu bilgiler, geri hareketini işleme kapsamında bileşenleri animasyonla kaldırmak için kullanılabilir.

Aşağıdaki snippet'te, hareket ilerlemesiyle birlikte Surface öğesinin ölçeğini azaltmak ve uzaklaştırmak için PredictiveBackHandler kullanımına dair bir örnek 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 { IntOffset(x = xOffset.dp.roundToPx(), y = 0) },
            color = Color.Blue
        ) {}
    }
}