Gdy używasz interfejsów API systemu, możesz włączyć animacje w aplikacji i obsługę przejść niestandardowych.
Po włączeniu tej funkcji aplikacja wyświetla animacje powrotu do ekranu głównego, przejścia między aktywnościami i przejścia między zadaniami.
Film przedstawia krótki przykład animacji przewidywanego przejścia wstecz w przypadku przejścia między aktywnościami i powrotu do ekranu głównego za pomocą aplikacji Ustawienia Androida.
- W animacji użytkownik przesuwa palcem w lewo, aby wrócić do poprzedniego ekranu ustawień – jest to przykład animacji przejścia między aktywnościami.
- Teraz na poprzednim ekranie użytkownik ponownie przesuwa palcem w lewo, co powoduje wyświetlenie podglądu ekranu głównego z tapetą – jest to przykład animacji powrotu do ekranu głównego.
- Użytkownik nadal przesuwa palcem w prawo, co powoduje wyświetlenie animacji zmniejszania się okna do ikony na ekranie głównym.
- Użytkownik wrócił do ekranu głównego.
Dowiedz się więcej o dodawaniu obsługi gestów przewidywania powrotu.
Dodawanie niestandardowych przejść i animacji w aplikacji
Możesz tworzyć niestandardowe animacje i przejścia właściwości w aplikacji, niestandardowe animacje przejścia między aktywnościami oraz niestandardowe animacje przejścia między fragmentami za pomocą gestów przewidywania powrotu.
Dodawanie przejść niestandardowych w Jetpack Compose
Aby obsługiwać gesty przewidywania powrotu w Jetpack Compose i tworzyć niestandardowe przejścia w aplikacji, możesz użyć funkcji PredictiveBackHandler. Ta funkcja jest dostępna w wersji androidx.activity:activity-compose:1.8.0-alpha01 lub nowszej.
PredictiveBackHandler udostępnia lambdę wywołania zwrotnego, która udostępnia
Flow<BackEventCompat> która emituje zdarzenia, gdy użytkownik przesuwa palcem w lewo od
krawędzi.
Te zdarzenia zawierają informacje o pozycji dotyku użytkownika, krawędzi przesunięcia i, co najważniejsze, o progress, którego można użyć do animowania komponentów w ramach obsługi gestu powrotu.
Poniższy fragment kodu pokazuje przykład użycia funkcji PredictiveBackHandler do animowania zmniejszania się i oddalania Surface wraz z postępem gestu:
@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 ) {} } }