پیمایش به چندین مرحله تقسیم میشود. دلتای ورودی از طریق دنبالهای از مراحل ارسال میشود تا اطمینان حاصل شود که هر مرحله فرصتی برای مصرف یا واکنش به حرکت دارد.
در طول این چرخه، هم دلتای ورودی موجود و هم دلتای ورودی مصرفی در هر مرحله منتقل میشوند. این امر زمینه کامل مورد نیاز برای واکنش به، مصرف یا گوش دادن به رویداد اسکرول را برای هر فاز فراهم میکند.

همانطور که در شکل ۱ نشان داده شده است، فرآیند پیمایش دقیقاً از این ترتیب پیروی میکند:
- پیمایش بیش از حد: ابتدا دلتای ورودی اولیه را دریافت میکند، که به پیمایش بیش از حد فرصتی برای واکنش نشان دادن میدهد (برای مثال، با آرام کردن یک اثر کششی فعال).
- پیشاسکرول تودرتو: فرصتی برای واکنش به دلتای ورودی قبل از مرحله اسکرول فراهم میکند. در این مرحله، ممکن است مقداری دلتای ورودی مصرف شود، یا ممکن است فقط برای ایجاد تغییرات رابط کاربری، مانند جمع کردن یا باز کردن نوار برنامه، مورد نظارت قرار گیرد.
- تبدیل دلتای ورودی : علامت دلتای ورودی خام را بر اساس جهت و جهت طرحبندی تنظیم میکند تا رفتار پیمایش طبیعی تضمین شود. برای اطلاعات بیشتر، به بخش تبدیل دلتای ورودی مراجعه کنید.
- پیمایش: این مرحله دلتای ورودی موجود و مصرف نشده را که برای مطابقت با پیکربندی محفظه پیمایش تنظیم شده است، دریافت میکند. معمولاً از این دلتا برای بهروزرسانی آفست پیمایش خود استفاده میکند.
- بازگشت به دلتای ورودی خام : دلتای موجود و مصرفشده را از فاز پیمایش به علامت دلتای ورودی خام اصلی برمیگرداند.
- پیمایش تو در تو پس از پیمایش: این مرحله پس از اتمام مرحله پیمایش اصلی واکنش نشان میدهد و دلتاهای موجود و مصرفشده جدید را دریافت میکند. این مرحله میتواند هر ورودی موجود باقیمانده را مصرف کند، یا از زمینه آنچه که تازه مصرف شده است استفاده کند.
- پیمایش بیش از حد: این مرحله آخر، دلتاهای نهایی موجود و مصرفشده را بررسی میکند. هر ورودی موجود باقیمانده که به این مرحله برسد، معمولاً برای اعمال جلوههای لبه، مانند کشیدگی یا درخشش، استفاده میشود که نشان میدهد کاربر به مرز ناحیه قابل پیمایش رسیده است.
تبدیل دلتای ورودی
دلتای ورودی اشارهگر نیاز به تنظیم علامت در طول مراحل اسکرول دارد تا با قراردادهای مورد انتظار مطابقت داشته باشد. قبل از اینکه دلتا به مرحله اسکرول برسد، اصلاحکنندههای اسکرول، دلتای ورودی را بر اساس جهت، جهت طرحبندی و زمینههای RTL تنظیم میکنند. این اتفاق میافتد زیرا ورودی خام، حرکت فیزیکی پیکسلی اشارهگر روی صفحه را ردیابی میکند (برای مثال، حرکت به پایین، مختصات Y صفحه را افزایش میدهد و دلتای مثبتی ایجاد میکند). با این حال، برای دستیابی به "اسکرول طبیعی" که در آن محتوا با انگشت شما حرکت میکند، کشیدن به پایین به این معنی است که نمای دید باید روی محتوا به بالا تغییر کند، که مربوط به یک جابجایی منفی اسکرول است.
دلتاهای ورودی از سایر منابع ورودی، مانند چرخ ماوس یا صفحه لمسی، در طول مراحل پیمایش تغییر نمیکنند.
مثال: اشارهگر با استفاده از Modifier.horizontalScroll() به سمت راست حرکت میکند

برای درک چگونگی مصرف و تبدیل دلتاها، به شکل ۲ مراجعه کنید که حرکتی را نشان میدهد که در آن اشارهگر به سمت راست حرکت میکند.
- پیشپیمایش: این حرکت با یک دلتای ورودی خام مثبت ۱۰۰ آغاز میشود.
- Overscroll این را مشاهده میکند و 10 را مصرف میکند و 90 باقی میماند.
- اسکرول تو در تو پیش از اسکرول به کامپوننت والد فرصتی برای واکنش میدهد و 30 واحد مصرف میکند. دلتای خام باقیمانده 60 واحد است.
- تبدیل الف : قبل از ورود به مرحله اسکرول ،
horizontalScrollدلتای خام مثبت باقیمانده ( 60 ) را به یک دلتای منفی ( -60 ) تبدیل میکند. این کار تضمین میکند که صفحه نمایش به سمت چپ منتقل میشود، بنابراین به نظر میرسد محتوا با انگشت کاربر به سمت راست حرکت میکند. - پیمایش: کامپوننت پیمایشپذیر هدف، بخشی از این دلتای تبدیلشده را برای بهروزرسانی آفست پیمایش خود مصرف میکند. در این مثال، مقدار -30 را مصرف میکند و -30 را بدون مصرف باقی میگذارد.
- تبدیل ب: دلتای پیمایش مصرف نشده (-30) دوباره به یک دلتای خام مثبت (30) تبدیل میشود تا با قرارداد پیمایش تو در تو و پیمایش بیش از حد مطابقت داشته باشد.
- پس از پیمایش: دلتای خام باقیمانده دوباره به خط لوله منتقل میشود.
- پیمایش تو در تو پس از پیمایش، ۱۰ واحد مصرف میکند و ۲۰ واحد باقی میماند.
- افکت Overscroll از 20 عدد آخر برای ایجاد جلوههای لبه بصری، مانند کشیدگی یا درخشش، استفاده میکند و دلتای ورودی را به طور کامل به 0 تبدیل میکند.
مرجع تبدیل دلتا ورودی اشارهگر
جدول زیر نحوه علامتگذاری دلتاهای ورودی در فازها و جهتهای مختلف برای ورودی اشارهگر را شرح میدهد.
| دلتای ورودی خام | افکت اسکرول بیش از حد | اسکرول تو در تو | scrollableArea با جهت افقی | scrollableArea با جهت افقی (معکوس) | scrollableArea با جهت عمودی | scrollableArea با جهت عمودی (معکوس) | |
|---|---|---|---|---|---|---|---|
| اشارهگر به سمت بالا حرکت میکند | منفی | منفی | منفی | ناموجود | ناموجود | مثبت | منفی |
| اشارهگر به پایین حرکت میکند | مثبت | مثبت | مثبت | ناموجود | ناموجود | منفی | مثبت |
| اشارهگر به سمت چپ حرکت میکند | منفی | منفی | منفی | مثبت (منفی برای RTL) | منفی (مثبت برای RTL) | ناموجود | ناموجود |
| اشارهگر به سمت راست حرکت میکند | مثبت | مثبت | مثبت | منفی (مثبت برای RTL) | مثبت (منفی برای RTL) | ناموجود | ناموجود |