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मॉडिफ़ायर पर पास करने के लिए, किसी खास कॉलबैक को भी शून्य पर सेट किया जा सकता है.