Thao tác cuộn được chia thành nhiều giai đoạn. Delta đầu vào được gửi thông qua một chuỗi các giai đoạn để đảm bảo mỗi giai đoạn đều có cơ hội sử dụng hoặc phản ứng với chuyển động.
Trong suốt chu kỳ này, cả delta đầu vào có sẵn và delta đầu vào đã sử dụng đều được truyền qua ở mỗi bước. Điều này cung cấp cho mỗi giai đoạn bối cảnh hoàn chỉnh cần thiết để phản ứng, sử dụng hoặc theo dõi sự kiện cuộn.
Như minh hoạ trong Hình 1, quy trình cuộn tuân theo thứ tự chính xác sau:
- Cuộn quá mức: Nhận delta đầu vào ban đầu trước, giúp cuộn quá mức có cơ hội phản ứng trước (ví dụ: bằng cách giảm hiệu ứng kéo giãn đang hoạt động).
- Cuộn trước khi cuộn lồng nhau: Tạo cơ hội phản ứng với delta đầu vào trước giai đoạn Cuộn. Trong giai đoạn này, một số delta đầu vào có thể được sử dụng hoặc có thể chỉ được theo dõi để kích hoạt các thay đổi về giao diện người dùng, chẳng hạn như thu gọn hoặc mở rộng thanh ứng dụng.
- Biến đổi delta đầu vào: Điều chỉnh dấu của delta đầu vào thô dựa trên hướng và hướng bố cục để đảm bảo hành vi cuộn tự nhiên. Để biết thêm thông tin, hãy xem phần Biến đổi delta đầu vào.
- Cuộn: Giai đoạn này nhận được delta đầu vào có sẵn, chưa sử dụng được điều chỉnh để phù hợp với cấu hình vùng chứa cuộn. Thành phần này thường sử dụng delta này để cập nhật độ lệch cuộn của chính nó.
- Khôi phục về delta đầu vào thô: Khôi phục delta có sẵn và đã sử dụng từ giai đoạn Cuộn về dấu delta đầu vào thô ban đầu.
- Sau khi cuộn lồng nhau: Giai đoạn này phản ứng sau khi giai đoạn cuộn chính hoàn tất, nhận các delta mới cập nhật có sẵn và đã sử dụng. Trình phân tích cú pháp có thể sử dụng mọi dữ liệu đầu vào còn lại hoặc sử dụng ngữ cảnh của dữ liệu vừa được sử dụng.
- Cuộn quá mức: Giai đoạn cuối cùng này xem xét các delta cuối cùng có sẵn và đã sử dụng. Mọi dữ liệu đầu vào còn lại đến được giai đoạn này thường được dùng để tạo hiệu ứng cạnh, chẳng hạn như kéo giãn hoặc phát sáng, cho biết người dùng đã đến ranh giới của vùng có thể cuộn.
Biến đổi delta đầu vào
Delta đầu vào con trỏ yêu cầu điều chỉnh dấu hiệu trên các giai đoạn cuộn để khớp với hợp đồng dự kiến. Trước khi delta đạt đến giai đoạn Cuộn, đối tượng sửa đổi cuộn sẽ điều chỉnh delta đầu vào dựa trên hướng, hướng bố cục và ngữ cảnh RTL. Điều này xảy ra vì dữ liệu đầu vào thô theo dõi chuyển động của pixel vật lý của con trỏ trên màn hình (ví dụ: di chuyển xuống dưới sẽ làm tăng toạ độ Y của màn hình, tạo ra một delta dương). Tuy nhiên, để đạt được "thao tác cuộn tự nhiên" khi nội dung di chuyển theo ngón tay, thao tác kéo xuống có nghĩa là khung nhìn phải dịch chuyển lên trên nội dung, tương ứng với độ lệch cuộn âm.
Độ lệch đầu vào từ các nguồn đầu vào khác, chẳng hạn như con lăn chuột hoặc bàn di chuột, không được chuyển đổi trong suốt các giai đoạn cuộn.
Ví dụ: Con trỏ di chuyển sang phải bằng Modifier.horizontalScroll()
Để hiểu cách sử dụng và chuyển đổi delta, hãy xem Hình 2, trong đó ánh xạ một cử chỉ mà con trỏ di chuyển sang phải.
- Trước khi cuộn: Cử chỉ bắt đầu bằng giá trị delta đầu vào thô dương là 100.
- Cuộn quá mức quan sát điều này và sử dụng 10, còn lại 90.
- Cuộn trước khi cuộn lồng cho phép thành phần mẹ phản ứng, sử dụng 30. Mức chênh lệch thô còn lại là 60.
- Phép biến đổi A: Trước khi chuyển sang giai đoạn Cuộn,
horizontalScrollsẽ đảo ngược delta thô dương còn lại (60) thành delta âm (-60). Điều này đảm bảo khung nhìn dịch chuyển sang trái để nội dung có vẻ như di chuyển sang phải theo ngón tay của người dùng. - Cuộn: Thành phần có thể cuộn mục tiêu sử dụng một phần của delta đã biến đổi này để cập nhật độ lệch cuộn. Trong ví dụ này, nó sử dụng -30, còn lại -30 chưa sử dụng.
- Biến đổi B: Delta cuộn chưa sử dụng (-30) được chuyển đổi trở lại thành delta thô dương (30) để khớp với hợp đồng cuộn lồng nhau và cuộn quá mức.
- Sau khi cuộn: Delta thô còn lại được chuyển trở lại quy trình.
- Thao tác sau khi cuộn lồng nhau tiêu thụ 10, còn lại 20.
- Hiệu ứng cuộn quá mức sử dụng 20 cuối cùng để tạo hiệu ứng cạnh hình ảnh, chẳng hạn như kéo giãn hoặc phát sáng, phân giải hoàn toàn delta đầu vào thành 0.
Tài liệu tham khảo về phép biến đổi delta đầu vào con trỏ
Bảng sau đây trình bày cách ký các giá trị delta đầu vào trong các giai đoạn và hướng khác nhau cho hoạt động nhập bằng con trỏ.
| Độ chênh lệch đầu vào thô | Hiệu ứng cuộn quá mức | Cuộn lồng | scrollableArea có hướng ngang |
scrollableArea theo hướng ngang (đảo ngược) |
scrollableArea có hướng dọc |
scrollableArea theo hướng dọc (đảo ngược) |
|
|---|---|---|---|---|---|---|---|
| Con trỏ di chuyển LÊN | Tiêu cực | Tiêu cực | Tiêu cực | Không áp dụng | Không áp dụng | Tích cực | Tiêu cực |
| Con trỏ di chuyển XUỐNG | Tích cực | Tích cực | Tích cực | Không áp dụng | Không áp dụng | Tiêu cực | Tích cực |
| Con trỏ di chuyển sang TRÁI | Tiêu cực | Tiêu cực | Tiêu cực | Dương (Âm đối với RTL) | Âm (Dương cho RTL) | Không áp dụng | Không áp dụng |
| Con trỏ di chuyển sang PHẢI | Tích cực | Tích cực | Tích cực | Âm (Dương cho RTL) | Dương (Âm đối với RTL) | Không áp dụng | Không áp dụng |