Jetpack Compose Glimmer में, पॉइंटर के इनडायरेक्ट इनपुट को मैनेज करना

इन XR डिवाइसों पर लागू होता है
इस गाइड की मदद से, इन तरह के एक्सआर डिवाइसों के लिए अनुभव बनाए जा सकते हैं.
ऑडियो और
डिसप्ले ग्लास

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