onIndirectPointerGesture मॉडिफ़ायर की मदद से, कॉम्पोनेंट को हाई-लेवल के इनडायरेक्ट पॉइंटर इवेंट मिलते हैं और वह उनका जवाब दे पाता है. जैसे, डिवाइस के टचपैड से जनरेट होने वाले इवेंट. इस मॉडिफ़ायर का इस्तेमाल, टचपैड या मिलते-जुलते सोर्स से मिलने वाले जेस्चर को कैप्चर और प्रोसेस करने के लिए करें.
एपीआई सरफ़ेस
आपके ऐप्लिकेशन के पास चार कॉलबैक होते हैं. इनका इस्तेमाल करके, हैंडलिंग को कंट्रोल किया जा सकता है:
onClick: यह इवेंट तब ट्रिगर होता है, जब उपयोगकर्ता किसी एलिमेंट पर टैप या क्लिक करता है और उसके हाथ या कर्सर में ज़्यादा हॉरिज़ॉन्टल मूवमेंट नहीं होता है.onSwipeForward: यह तब ट्रिगर होता है, जब हॉरिज़ॉन्टल स्वाइप, आगे की ओर तय की गई दूरी और वेलोसिटी थ्रेशोल्ड से ज़्यादा हो.onSwipeBackward: यह तब ट्रिगर होता है, जब हॉरिज़ॉन्टल स्वाइप, पीछे की ओर तय की गई दूरी और वेलोसिटी थ्रेशोल्ड से ज़्यादा हो.Enabled: इसेfalseपर सेट करने पर, मॉडिफ़ायर को अनदेखा कर दिया जाता है और किसी भी कॉलबैक को लागू नहीं किया जाता.
स्वाइप करने और स्क्रोल करने पर सिस्टम के काम करने का तरीका
सिस्टम, क्लिक और स्वाइप के बीच अंतर करने के लिए, टच स्लोप थ्रेशोल्ड का इस्तेमाल करता है.
- अगर पॉइंटर को दबाकर रखने के दौरान वह काफ़ी हिलता है, तो
onClickरद्द हो जाता है. - अगर पॉइंटर को काफ़ी पीछे की ओर ले जाया जाता है, तो स्वाइप करने के जेस्चर को अमान्य कर दिया जाता है.
उदाहरण: किसी कॉम्पोनेंट पर स्वाइप और क्लिक करने की सुविधा सेट अप करना
नीचे दिया गया कोड, फ़ोकस किए जा सकने वाले Box पर स्वाइप और क्लिक करने की सुविधा सेट अप करता है:
@Composable @Sampled fun OnIndirectPointerGestureSample() { Box( modifier = Modifier.fillMaxSize() .onIndirectPointerGesture( enabled = true, onSwipeForward = { /* onSwipeForward */ }, onSwipeBackward = { /* onSwipeBackward */ }, onClick = { /* onClick */ }, ) .focusTarget() ) { // App() } }
कोड के बारे में अहम बातें
onIndirectPointerGestureपर फ़ोकस करने की ज़रूरत होती है. इसलिए,focusTargetको भी लागू किया जाता है, ताकिBoxपर फ़ोकस किया जा सके.focusTargetया फ़ोकस करने की सुविधा चालू करने वाले किसी दूसरे मॉडिफ़ायर, जैसे किsurfaceका इस्तेमाल किया जा सकता है. फ़ोकस के बिना, मॉडिफ़ायर अप्रत्यक्ष पॉइंटर इवेंट पर कार्रवाई नहीं कर सकता.- इस उदाहरण में,
onSwipeForwardऔरonClick, दोनों कॉलबैक लागू किए गए हैं. इसलिए, स्वाइप और क्लिक के जिन जेस्चर का पता चलता है उन्हें इंटरसेप्ट और इस्तेमाल किया जाता है. साथ ही, वे पैरंट कंटेनर तक नहीं पहुंचते हैं. हालांकि, किसी जेस्चर को पैरंट कंटेनर में मौजूदonIndirectPointerGestureमॉडिफ़ायर को पास करने के लिए, किसी खास कॉलबैक को भी शून्य पर सेट किया जा सकता है. -