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