عند استخدام واجهات برمجة التطبيقات لإيماءة الرجوع في النظام، يمكنك الموافقة على تلقّي صور متحرّكة داخل التطبيق واستخدام انتقالات مخصّصة.
بعد الموافقة، يعرض تطبيقك صورًا متحرّكة لإيماءات الرجوع إلى الشاشة الرئيسية والتنقّل بين الأنشطة والتنقّل بين المهام.
يعرض الفيديو مثالاً موجزًا عن إيماءة إظهار شاشة الرجوع عند التنقّل بين الأنشطة والرجوع إلى الشاشة الرئيسية باستخدام تطبيق "إعدادات Android".
- في الصورة المتحرّكة، يمرّر المستخدم سريعًا إلى الخلف للرجوع إلى شاشة الإعدادات السابقة، وهو مثال على صورة متحرّكة للتنقّل بين الأنشطة.
- على الشاشة السابقة، يبدأ المستخدم التمرير سريعًا إلى الخلف مرة ثانية، ما يعرض معاينة للشاشة الرئيسية مع خلفيتها، وهو مثال على الصورة المتحرّكة للرجوع إلى الشاشة الرئيسية.
- يواصل المستخدم التمرير سريعًا إلى اليمين، ما يعرض صورة متحرّكة للنافذة وهي تتقلّص إلى الرمز على الشاشة الرئيسية.
- عاد المستخدم الآن إلى الشاشة الرئيسية بالكامل.
مزيد من المعلومات حول كيفية إضافة إمكانية استخدام إيماءات الرجوع.
إضافة انتقالات وصور متحرّكة مخصّصة داخل التطبيق
يمكنك إنشاء صور متحرّكة وانتقالات مخصّصة للخصائص داخل التطبيق، وصور متحرّكة مخصّصة للتنقّل بين الأنشطة، وصور متحرّكة مخصّصة للتنقّل بين الأجزاء باستخدام إيماءات الرجوع.
إضافة انتقالات مخصّصة في Jetpack Compose
يمكنك استخدام PredictiveBackHandler للتعامل مع إيماءات الرجوع في Jetpack Compose من أجل إنشاء انتقالات مخصّصة داخل التطبيق. تتوفّر هذه الميزة في androidx.activity:activity-compose:1.8.0-alpha01 أو الإصدارات الأحدث.
PredictiveBackHandler توفّر دالة lambda ردّ نداء تعرض
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(x = xOffset.dp, y = 0.dp), color = Color.Blue ) {} } }