التعامل مع إدخالات المؤشر غير المباشرة في 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 في حاوية رئيسية.