پیمایش به چند مرحله تقسیم میشود. تغییر ورودی ازطریق توالی فازها ارسال میشود تا اطمینان حاصل شود که هر فاز فرصتی برای مصرف یا واکنش به حرکت دارد.
درطول این چرخه، هم دلتای ورودی دردسترس و هم دلتای ورودی مصرفشده در هر مرحله منتقل میشوند. این کار باعث میشود هر فاز بافت کاملی را که برای واکنش نشان دادن، مصرف کردن، یا گوش دادن به رویداد پیمایش نیاز دارد داشته باشد.
همانطور که در شکل ۱ نشان داده شده است، فرایند پیمایش دقیقاً از این ترتیب پیروی میکند:
- پیمایش بیشازحد: ابتدا دلتای ورودی اولیه را دریافت میکند، که به پیمایش بیشازحد فرصت میدهد تا ابتدا واکنش نشان دهد (برای مثال، با کاهش اثر کشش فعال).
- پیشپیمایش پیمایش تودرتو: فرصتی برای واکنش به دلتای ورودی قبلاز مرحله پیمایش فراهم میکند. In this phase, some input delta might be consumed, or it may just be monitored to trigger UI changes, such as collapsing or expanding an app bar.
- تبدیل دلتای ورودی: علامت دلتای ورودی خام را براساس جهت و جهتگیری چیدمان تنظیم میکند تا رفتار پیمایش طبیعی تضمین شود. برای اطلاعات بیشتر، به بخش تبدیل دلتای ورودی مراجعه کنید.
- پیمایش: این فاز دلتای ورودی دردسترس و مصرفنشده را دریافت میکند که برای مطابقت با پیکربندی محفظه پیمایش تنظیم شده است. معمولاً از این دلتا برای بهروزرسانی آفست پیمایش خود استفاده میکند.
- برگرداندن به دلتای ورودی خام: دلتای دردسترس و مصرفشده را از مرحله پیمایش به علامت دلتای ورودی خام اصلی برمیگرداند.
- پیمایش تودرتو پساز پیمایش: این فاز پساز تکمیل فاز پیمایش اصلی واکنش نشان میدهد و دلتاهای دردسترس و مصرفشده بهروزرسانیشده جدید را دریافت میکند. این مدل میتواند هر ورودی باقیماندهای را مصرف کند یا از بافت آنچه بهتازگی مصرف شده است استفاده کند.
- پیمایش بیشازحد: این مرحله آخر به دلتاهای نهایی دردسترس و مصرفشده نگاه میکند. هر ورودی دردسترس باقیماندهای که به این مرحله میرسد معمولاً برای ایجاد جلوههای لبه، مانند کشش یا درخشش، استفاده میشود که نشان میدهد کاربر به مرز ناحیه پیمایششدنی رسیده است.
اختلاف ورودی تبدیل
Pointer input delta requires sign adjustments across scroll phases to match expected contracts. قبلاز اینکه دلتا به فاز پیمایش برسد، اصلاحکنندههای پیمایش دلتای ورودی را براساس جهت، جهت چیدمان، و زمینههای راست به چپ تنظیم میکنند. این اتفاق به این دلیل میافتد که ورودی خام حرکت فیزیکی پیکسل اشارهگر را روی صفحهنمایش ردیابی میکند (برای مثال، حرکت به پایین مختصات Y صفحهنمایش را افزایش میدهد و دلتای مثبتی ایجاد میکند). بااینحال، برای دستیابی به «پیمایش طبیعی» که در آن محتوا با انگشت شما حرکت میکند، کشیدن به پایین به این معنی است که ناحیه نمایش باید روی محتوا به بالا جابهجا شود، که با یک جابهجایی پیمایش منفی مطابقت دارد.
تغییرات ورودی از منابع ورودی دیگر، مانند چرخ موشواره یا صفحه لمسی، درطول مراحل پیمایش تبدیل نمیشوند.
مثال: اشارهگر بااستفاده از Modifier.horizontalScroll() به راست حرکت میکند
برای درک نحوه مصرف و تبدیل دلتاها، به شکل ۲ مراجعه کنید که اشارهای را نشان میدهد که در آن اشارهگر به سمت راست حرکت میکند.
- پیشاز پیمایش: اشاره با دلتای ورودی خام مثبت ۱۰۰ شروع میشود.
- Overscroll این را مشاهده میکند و ۱۰ را مصرف میکند و ۹۰ باقی میماند.
- پیمایش تودرتو پیشپیمایش به مؤلفه ولی فرصت میدهد تا واکنش نشان دهد و ۳۰ را مصرف کند. دلتا خام باقیمانده ۶۰ است.
- تبدیل الف: قبلاز ورود به مرحله پیمایش،
horizontalScrollدلتای خام مثبت باقیمانده (۶۰) را به دلتای منفی (-۶۰) تبدیل میکند. این کار باعث میشود که نمای دید به چپ منتقل شود تا محتوا با انگشت کاربر به راست حرکت کند. - پیمایش: مؤلفه قابلپیمایش هدف بخشی از این دلتای تبدیلشده را برای بهروزرسانی آفست پیمایش خود مصرف میکند. در این مثال، -30 را مصرف میکند و -30 مصرفنشده باقی میماند.
- تبدیل B: دلتای پیمایش مصرفنشده (-۳۰) دوباره به دلتای خام مثبت (۳۰) تبدیل میشود تا با قرارداد پیمایش تودرتو و پیمایش بیشازحد مطابقت داشته باشد.
- پساز پیمایش: دلتای خام باقیمانده به خط لوله برگردانده میشود.
- پیمایش تودرتو پساز پیمایش ۱۰ را مصرف میکند و ۲۰ باقی میماند.
- جلوه پیمایش بیشازحد از ۲۰ نهایی برای هدایت جلوههای لبه بصری، مانند کشش یا درخشش، استفاده میکند و دلتای ورودی را کاملاً به ۰ میرساند.
مرجع تبدیل دلتای ورودی اشارهگر
جدول زیر نشان میدهد که چگونه دلتاهای ورودی در فازها و جهتهای مختلف برای ورودی اشارهگر امضا میشوند.
| اختلاف ورودی خام | جلوه پیمایش بیشازحد | پیمایش تودرتو | scrollableArea با جهت افقی |
scrollableArea با جهت افقی (معکوس) |
scrollableArea با جهت عمودی |
scrollableArea با جهت عمودی (معکوس) |
|
|---|---|---|---|---|---|---|---|
| اشارهگر به بالا حرکت میکند | منفی | منفی | منفی | موجود نیست | موجود نیست | مثبت | منفی |
| اشارهگر به پایین حرکت میکند | مثبت | مثبت | مثبت | موجود نیست | موجود نیست | منفی | مثبت |
| اشارهگر به چپ حرکت میکند | منفی | منفی | منفی | مثبت (منفی برای راست به چپ) | منفی (مثبت برای راستبهچپ) | موجود نیست | موجود نیست |
| اشارهگر به راست حرکت میکند | مثبت | مثبت | مثبت | منفی (مثبت برای راستبهچپ) | مثبت (منفی برای راست به چپ) | موجود نیست | موجود نیست |