Sử dụng SnapHelper trong RecyclerView

Giới thiệu

Nhiều khi tôi dùng CH Play. Nhìn danh sách các ứng dụng nhưng không biết nó là một viewpager hay là một listview hay recyclerview. Thế là tôi mày mò thử tìm hiểu xem nó sử dụng component nào để xử lý việc vuốt danh sách item đấy giống như vuốt viewpager nó là cái gì. Thì cuối cùng tôi cũng tìm hiểu ra tính năng này đã được Android cung cấp và nó có tên là SnapHelper

SnapHelper là cái gì

SnapHelper là một class hỗ trợ việc bám các View con của RecyclerView. Ví dụ như bạn có thể nhìn thấy trong ứng dụng CH Play. Danh sách các item tiếp theo sẽ luôn luôn hiển thị ở cuối danh sách.

Android đã cung cấp thư viện để xử lý như trên ảnh. Class đó tên là LinearSnapHelper nhưng class này chỉ hỗ trợ việc snapping item ra giữa.
Để sử dụng SnapHelper bạn chỉ cần viết theo như ở bên dưới

Nhưng nếu làm thế này thì vẫn chưa giống với RecyclerView ở trong CH Play. Các Item Snap ở vị trí bắt đầu cơ mà?

Bây giờ chúng ta đi vào custom lại class LinearSnapHelper giống với hình trên nhé

Đầu tiên, tôi tạo 1 class có tên là StartSnapHelper kế thừa lại từ LinearSnapHelper. Và class này sẽ có overridecác methods bên dưới nhé :

1. calculateDistanceToFinalSnap

Override method này để snap một điểm cụ thể cho view mong muốn snap hoặc một container view nằm trên trục. Method này được gọi khi SnapHelper can thiệp vào quá trình fling của người dùng và nó biết chính xác khoảng cách bắt buộc để scroll đến cái view tiếp theo.

2. findSnapView

Override method này để cung cấp một View cụ thể cho snapping. Method này được gọi khi SnapHelper đã sẵn sàng để bắt đầu snap và yêu cầu bắt buộc một View mục tiêu để snap. Nó sẽ được gọi là khi hành động scroll recyclerview dừng lại.Nó cũng sẽ được gọi là khi SnapHelper đang chuẩn bị snap sau khi fling recyclerview và yêu cầu phải có một view để tham chiếu từ các child view hiện tại của recyclerView . Nếu method này trả về null, SnapHelper sẽ không snap bất kỳ một view nào nữa cả.

Và đây là cả class StartSnapHelper

Bây giờ bạn có thể sử dụng nó vào trong RecyclerView của mình rồi :

Đây là ví dụ về SnapHelper

Cảm ơn bạn đã đọc bài viết này của tôi.

HAPPY CODING!

Nguồn dịch từ Amit Shekhar  via viblo