يتيح المعدِّل 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في حاوية رئيسية.