هنگام استفاده از APIهای برگشت سیستم، میتوانید برای دریافت پویانماییهای درونبرنامه و پشتیبانی از گذارهای سفارشی موافقت کنید.
پساز موافقت کردن، برنامهتان پویانماییهای برگشت به صفحه اصلی، بینفعالیتی، و بینتکلیفی را نمایش میدهد.
این ویدیو نمونه کوتاهی از پویانماییهای برگشت پیشگویانه برای بین فعالیتها و برگشت به صفحه اصلی بااستفاده از برنامه «تنظیمات Android» را نشان میدهد.
- در پویانمایی، کاربر تند به عقب میکشد تا به صفحه تنظیمات قبلی برگردد—نمونهای از پویانمایی بینفعالیتی.
- اکنون در صفحه قبلی، کاربر برای بار دوم تند بهعقب میکشد و پیشنمایشی از صفحه اصلی با تصویر زمینهاش را نشان میدهد—نمونهای از پویانمایی برگشتن به صفحه اصلی.
- کاربر به تند کشیدن به راست ادامه میدهد و پویانماییای از کوچک شدن پنجره به نماد در صفحه اصلی نشان داده میشود.
- کاربر اکنون کاملاً به صفحه اصلی برگشته است.
درباره نحوه افزودن پشتیبانی برای اشارههای برگشت پیشبینانه بیشتر بدانید.
افزودن پویانماییها و گذرهای درونبرنامهای سفارشی
میتوانید بااستفاده از Compose یا Views، گذارها و پویانماییهای دارایی درونبرنامهای سفارشی، پویانماییهای بینفعالیتی سفارشی، و پویانماییهای بینتکهای سفارشی با اشارههای برگشت پیشبینانه ایجاد کنید. برای آشنایی با نحوه ایجاد گذر بااستفاده از Views، به افزودن پشتیبانی از پویانماییهای اشاره برگشت پیشگویانه در 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 ) {} } }