स्क्रोल करने की प्रोसेस को कई चरणों में बांटा गया है. इनपुट डेल्टा को कई चरणों में भेजा जाता है, ताकि यह पक्का किया जा सके कि हर चरण में मूवमेंट को इस्तेमाल करने या उस पर प्रतिक्रिया देने का मौका मिले.
इस साइकल के दौरान, उपलब्ध इनपुट डेल्टा और इस्तेमाल किया गया इनपुट डेल्टा, दोनों हर चरण में पास किए जाते हैं. इससे हर फ़ेज़ को स्क्रोल इवेंट पर प्रतिक्रिया देने, उसे इस्तेमाल करने या सुनने के लिए ज़रूरी पूरी जानकारी मिलती है.
इमेज 1 में दिखाए गए तरीके के मुताबिक, स्क्रोल करने की प्रोसेस इस क्रम में होती है:
- ओवरस्क्रोल: इसे सबसे पहले शुरुआती इनपुट डेल्टा मिलता है. इससे ओवरस्क्रोल को सबसे पहले प्रतिक्रिया देने का मौका मिलता है. उदाहरण के लिए, स्ट्रेच इफ़ेक्ट को कम करके.
- नेस्टेड स्क्रोल प्री-स्क्रोल: इससे स्क्रोल फ़ेज़ से पहले, इनपुट डेल्टा पर प्रतिक्रिया देने का मौका मिलता है. इस फ़ेज़ में, कुछ इनपुट डेल्टा का इस्तेमाल किया जा सकता है या यूज़र इंटरफ़ेस (यूआई) में बदलावों को ट्रिगर करने के लिए, सिर्फ़ इसकी निगरानी की जा सकती है. जैसे, ऐप्लिकेशन बार को छोटा या बड़ा करना.
- इनपुट डेल्टा को बदलना: लेआउट ओरिएंटेशन और दिशा के आधार पर, रॉ इनपुट डेल्टा के साइन में बदलाव करता है, ताकि स्क्रोल करने का तरीका सामान्य लगे. ज़्यादा जानकारी के लिए, इनपुट डेल्टा को ट्रांसफ़ॉर्म करना सेक्शन देखें.
- स्क्रोल: इस फ़ेज़ में, उपलब्ध और इस्तेमाल नहीं किए गए इनपुट डेल्टा को स्क्रोलिंग कंटेनर कॉन्फ़िगरेशन के हिसाब से अडजस्ट किया जाता है. आम तौर पर, यह अपने स्क्रोल ऑफ़सेट को अपडेट करने के लिए, इस डेल्टा का इस्तेमाल करता है.
- रॉ इनपुट डेल्टा पर वापस जाएं: स्क्रोल फ़ेज़ से उपलब्ध और इस्तेमाल किए गए डेल्टा को ओरिजनल रॉ इनपुट डेल्टा साइन पर वापस ले जाता है.
- स्क्रोल करने के बाद नेस्टेड स्क्रोल: यह फ़ेज़, मुख्य स्क्रोल फ़ेज़ पूरा होने के बाद शुरू होता है. इसमें, अपडेट किए गए नए उपलब्ध और इस्तेमाल किए गए डेल्टा मिलते हैं. यह बचे हुए किसी भी इनपुट का इस्तेमाल कर सकता है या हाल ही में इस्तेमाल किए गए कॉन्टेंट के कॉन्टेक्स्ट का इस्तेमाल कर सकता है.
- ओवरस्क्रोल: इस आखिरी फ़ेज़ में, उपलब्ध और इस्तेमाल किए गए आखिरी डेल्टा को देखा जाता है. इस स्टेज तक पहुंचने वाले किसी भी बचे हुए इनपुट का इस्तेमाल, आम तौर पर एज इफ़ेक्ट को ट्रिगर करने के लिए किया जाता है. जैसे, स्ट्रेच या ग्लो. इससे पता चलता है कि उपयोगकर्ता, स्क्रोल किए जा सकने वाले हिस्से की सीमा तक पहुंच गया है.
इनपुट डेल्टा को ट्रांसफ़ॉर्म करना
पॉइंटर इनपुट डेल्टा के लिए, स्क्रोल के अलग-अलग फ़ेज़ में साइन अडजस्टमेंट की ज़रूरत होती है, ताकि उम्मीद के मुताबिक कॉन्ट्रैक्ट मैच किए जा सकें. डेल्टा के स्क्रोल फ़ेज़ में पहुंचने से पहले, स्क्रोल मॉडिफ़ायर ओरिएंटेशन, लेआउट की दिशा, और आरटीएल के हिसाब से इनपुट डेल्टा में बदलाव करते हैं. ऐसा इसलिए होता है, क्योंकि रॉ इनपुट, स्क्रीन पर पॉइंटर के फ़िज़िकल पिक्सल मूवमेंट को ट्रैक करता है. उदाहरण के लिए, नीचे की ओर जाने से स्क्रीन का Y-कोऑर्डिनेट बढ़ता है, जिससे पॉज़िटिव डेल्टा मिलता है. हालांकि, "नैचुरल स्क्रोलिंग" की सुविधा पाने के लिए, जहां कॉन्टेंट आपकी उंगली के साथ मूव करता है, वहां नीचे की ओर खींचने का मतलब है कि व्यूपोर्ट को कॉन्टेंट के ऊपर शिफ़्ट होना चाहिए. यह नेगेटिव स्क्रोल ऑफ़सेट से जुड़ा है.
माउस व्हील या टचपैड जैसे अन्य इनपुट सोर्स से मिलने वाले इनपुट डेल्टा, स्क्रोल करने के दौरान नहीं बदलते.
उदाहरण: Modifier.horizontalScroll() का इस्तेमाल करके, पॉइंटर दाईं ओर मूव करता है
डेल्टा का इस्तेमाल और उन्हें ट्रांसफ़ॉर्म करने का तरीका समझने के लिए, इमेज 2 देखें. इसमें एक जेस्चर को मैप किया गया है, जिसमें पॉइंटर दाईं ओर मूव करता है.
- प्री-स्क्रोल: जेस्चर, 100 के पॉज़िटिव रॉ इनपुट डेल्टा से शुरू होता है.
- Overscroll इसे ऑब्ज़र्व करता है और 10 का इस्तेमाल करता है. इससे 90 बचता है.
- नेस्टेड स्क्रोल प्री-स्क्रोल, पैरंट कॉम्पोनेंट को प्रतिक्रिया देने का मौका देता है. इसके लिए, वह 30 का इस्तेमाल करता है. बाकी बचा रॉ डेल्टा 60 है.
- ट्रांसफ़ॉर्मेशन A: स्क्रोल फ़ेज़ में जाने से पहले,
horizontalScrollबचे हुए पॉज़िटिव रॉ डेल्टा (60) को नेगेटिव डेल्टा (-60) में बदल देता है. इससे यह पक्का होता है कि व्यूपोर्ट बाईं ओर शिफ़्ट हो, ताकि उपयोगकर्ता की उंगली के साथ कॉन्टेंट दाईं ओर मूव होता हुआ दिखे. - स्क्रोल: टारगेट किया गया स्क्रोल करने लायक कॉम्पोनेंट, इस बदले गए डेल्टा के एक हिस्से का इस्तेमाल करके, अपने स्क्रोल ऑफ़सेट को अपडेट करता है. इस उदाहरण में, -30 का इस्तेमाल किया गया है और -30 का इस्तेमाल नहीं किया गया है.
- ट्रांसफ़ॉर्मेशन B: इस्तेमाल न किए गए स्क्रोल डेल्टा (-30) को वापस पॉज़िटिव रॉ डेल्टा (30) में बदला जाता है, ताकि नेस्ट किए गए स्क्रोल और ओवरस्क्रोल के कॉन्ट्रैक्ट से मैच किया जा सके.
- स्क्रोल करने के बाद: बाकी बचे रॉ डेल्टा को पाइपलाइन में वापस भेज दिया जाता है.
- नेस्टेड स्क्रोल पोस्ट-स्क्रोल 10 का इस्तेमाल करता है. इससे 20 बचता है.
- ओवरस्क्रोल इफ़ेक्ट, विज़ुअल एज इफ़ेक्ट को दिखाने के लिए, आखिरी 20 का इस्तेमाल करता है. जैसे, स्ट्रेच या ग्लो. इससे इनपुट डेल्टा पूरी तरह से 0 पर सेट हो जाता है.
पॉइंटर इनपुट डेल्टा ट्रांसफ़ॉर्मेशन रेफ़रंस
यहां दी गई टेबल में बताया गया है कि पॉइंटर इनपुट के लिए, अलग-अलग फ़ेज़ और दिशाओं में इनपुट डेल्टा पर कैसे साइन किया जाता है.
| रॉ इनपुट डेल्टा | ओवरस्क्रोल इफ़ेक्ट | नेस्टेड स्क्रोल | scrollableArea, हॉरिज़ॉन्टल ओरिएंटेशन के साथ |
हॉरिज़ॉन्टल ओरिएंटेशन (उल्टा) के साथ scrollableArea |
scrollableArea, वर्टिकल ओरिएंटेशन के साथ |
scrollableArea, वर्टिकल ओरिएंटेशन के साथ (उल्टा) |
|
|---|---|---|---|---|---|---|---|
| पॉइंटर ऊपर की ओर मूव करता है | नेगेटिव | नेगेटिव | नेगेटिव | लागू नहीं | लागू नहीं | पॉज़िटिव | नेगेटिव |
| पॉइंटर नीचे की ओर मूव करता है | पॉज़िटिव | पॉज़िटिव | पॉज़िटिव | लागू नहीं | लागू नहीं | नेगेटिव | पॉज़िटिव |
| पॉइंटर बाईं ओर मूव करता है | नेगेटिव | नेगेटिव | नेगेटिव | पॉज़िटिव (आरटीएल के लिए नेगेटिव) | नेगेटिव (आरटीएल के लिए पॉज़िटिव) | लागू नहीं | लागू नहीं |
| पॉइंटर दाईं ओर मूव करता है | पॉज़िटिव | पॉज़िटिव | पॉज़िटिव | नेगेटिव (आरटीएल के लिए पॉज़िटिव) | पॉज़िटिव (आरटीएल के लिए नेगेटिव) | लागू नहीं | लागू नहीं |