هنگام استفاده از APIهای برگشت سیستم، میتوانید برای دریافت پویانماییهای درونبرنامه و پشتیبانی از انتقالهای سفارشی موافقت کنید.
پساز موافقت کردن، برنامهتان پویانماییهای برگشت به صفحه اصلی، بین فعالیتها، و بین تکلیفها را نمایش میدهد.
این ویدیو نمونه کوتاهی از پویانماییهای برگشت پیشگویانه را برای بینفعالیتی و برگشت به صفحه اصلی بااستفاده از برنامه «تنظیمات Android» نشان میدهد.
- در پویانمایی، کاربر برای برگشتن به صفحه تنظیمات قبلی، تند به عقب میکشد—نمونهای از پویانمایی بینفعالیتی.
- اکنون در صفحه قبلی، کاربر برای بار دوم تند به عقب میکشد، پیشنمایشی از صفحه اصلی با کاغذدیواری آن نشان داده میشود—نمونهای از پویانمایی برگشت به صفحه اصلی.
- کاربر همچنان تند به راست میکشد و پویانماییای نشان داده میشود که در آن پنجره کوچک میشود و به نماد در صفحه اصلی تبدیل میشود.
- کاربر اکنون کاملاً به صفحه اصلی برگشته است.
درباره نحوه افزودن پشتیبانی برای اشارههای برگشت پیشگویانه بیشتر بدانید.
افزودن گذرها و پویانماییهای سفارشی درونبرنامه
میتوانید بااستفاده از Compose یا Views، پویانماییها و انتقالهای سفارشی برای ویژگیهای درونبرنامه، پویانماییهای سفارشی برای جابهجایی بین فعالیتها، و پویانماییهای سفارشی برای جابهجایی بین قطعهها با اشارههای برگشت پیشگویانه ایجاد کنید. برای آشنایی با نحوه ایجاد گذر بااستفاده از «نماها»، به افزودن پشتیبانی از پویانماییهای اشاره برگشت پیشگویانه در «نماها» مراجعه کنید.
افزودن گذرهای سفارشی در Jetpack Compose
میتوانید از PredictiveBackHandler برای مدیریت اشارههای برگشت پیشگویانه در
Jetpack Compose برای ایجاد گذارهای سفارشی درونبرنامه استفاده کنید. این ویژگی در
androidx.activity:activity-compose:1.8.0-alpha01 یا بالاتر دردسترس است.
PredictiveBackHandler یک لامبدا فراخوانی ارائه میدهد که
Flow<BackEventCompat> را نمایش میدهد که رویدادها را هنگام تند کشیدن کاربر از لبه به عقب منتشر میکند.
این رویدادها اطلاعاتی درباره موقعیت لمس کاربر، لبه تند کشیدن، و
مهمتر از همه progress ارائه میدهند که میتوان از آن برای پویانمایی مؤلفهها بهعنوان
بخشی از مدیریت اشاره برگشت استفاده کرد.
قطعه کد زیر نمونهای از استفاده از PredictiveBackHandler را برای پویانمایی کردن Surface درحال کوچک شدن و دور شدن با پیشرفت اشاره نشان میدهد:
@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 ) {} } }