التعامل مع إدخالات المؤشر غير المباشرة في Jetpack Compose Glimmer

أجهزة XR المشمولة
تساعدك هذه الإرشادات في إنشاء تجارب لهذه الأنواع من أجهزة XR.
نظارات بشاشة عرض

يتيح المُعدِّل onIndirectPointerGesture للمكوّن تلقّي أحداث المؤشر غير المباشرة العالية المستوى والاستجابة لها، مثل تلك التي تنشأ من لوحة اللمس في الجهاز. استخدِم هذا المُعدِّل لالتقاط الإيماءات الواردة من لوحة اللمس أو مصدر مشابه ومعالجتها.

مساحة عرض واجهة برمجة التطبيقات

هناك أربع عمليات استدعاء يمكن لتطبيقك استخدامها للتحكّم في المعالجة:

  • onClick: يتم تشغيل هذا الحدث عند النقر بنجاح بدون حركة أفقية كبيرة.
  • ‫onSwipeForward: يتم تشغيل هذا الحدث عندما يتجاوز التمرير السريع أفقيًا الحدّ الأقصى للمسافة والسرعة في الاتجاه الأمامي.
  • ‫onSwipeBackward: يتم تشغيل هذا الحدث عندما تتجاوز حركة التمرير السريع أفقيًا الحدّ الأقصى للمسافة والسرعة في الاتجاه الخلفي.
  • ‫Enabled: عند ضبط هذه السمة على false، يتم تجاهل المُعدِّل ولا يتم استدعاء أي عمليات إعادة اتصال.

سلوك النظام عند التمرير السريع والتمرير العادي

يستخدم النظام حدًا أقصى للانزلاق باللمس للتمييز بين النقر والتمرير السريع.

  • إذا تحرّك المؤشر بشكل كبير أثناء الضغط على الشاشة، يتم إلغاء onClick.
  • إذا تراجع المؤشر بشكل كبير أثناء الحركة، يتم إلغاء إيماءة التمرير السريع.

مثال: إعداد معالجة عمليات التمرير السريع والنقرات على أحد المكوّنات

يُعدّ الرمز التالي معالجة لعمليات التمرير السريع والنقرات على Box يمكن التركيز عليه:

@Composable
fun OnIndirectPointerGestureSample() {
    var lastGesture by remember { mutableStateOf("None") }

    Box(
        modifier =
            Modifier.fillMaxSize()
                .onIndirectPointerGesture(
                    enabled = true,
                    onSwipeForward = { lastGesture = "Forward" },
                    onSwipeBackward = { lastGesture = "Backward" },
                    onClick = { lastGesture = "Click" },
                )
                .focusTarget(),
        contentAlignment = Alignment.Center,
    ) {
        Text("Last Gesture: $lastGesture")
    }
}

نقاط رئيسية حول الرمز

  • يتطلّب العنصر onIndirectPointerGesture التركيز، لذا يتم أيضًا تطبيق السمة focusTarget لجعل العنصر Box قابلاً للتركيز. يمكنك استخدام focusTarget أو معدِّل آخر يتيح التركيز، مثل surface. بدون التركيز، لا يمكن للمعدِّل التعامل مع أحداث المؤشر غير المباشرة.
  • يستخدم هذا المثال كلاً من عمليات الاستدعاء onSwipeForward وonClick، لذلك يتم اعتراض إيماءات التمرير السريع والنقر التي يتم رصدها واستخدامها، ولا تصل إلى الحاويات الرئيسية. ومع ذلك، يمكنك أيضًا ترك دالة استدعاء معيّنة فارغة لتمرير إيماءة إلى معدِّل onIndirectPointerGesture في حاوية رئيسية.