2016-08-27 23 views
9

Tôi đang cố gắng triển khai một số loại công cụ chọn bánh cho ứng dụng của mình, vì tùy chọn hiện tại dựa trên tùy chỉnh Views hoặc ListView cũ, vì vậy tôi muốn dựa trên giải pháp của mình trên RecyclerView.Dọc theo chiều dọc giữa các mục đã chọn trong RecyclerView

Những gì tôi đã làm cho đến nay là để thiết lập ngay từ đầu và ở phần cuối của RecyclerView hai View với một kiểu khác nhau, tên PADDING_TYPE để là người đầu tiên và mục cuối cùng được tập trung theo chiều dọc trong RecyclerView.

recyclerView.post(new Runnable() { 
    @Override 
    public void run() { 
     //80dp is the height of a regular list item 
     int paddingHeight = ((recyclerView.getHeight()-SettingsManager.dptopixels(80))/2); 
     binding.getRoot().getLayoutParams().height = paddingHeight; 
    } 
}); 

Bây giờ tôi đang cố gắng hiểu cách giữ mục được chọn theo chiều dọc.

gì tôi đã cố gắng cho đến nay:

1- LinearSnapHelper

LinearSnapHelper helper = new LinearSnapHelper(); 
helper.attachToRecyclerView(mRecyclerView); 

Không làm việc như mong đợi, tôi cũng đã cố gắng để Override một số phương pháp (có thể là trong một cách sai lầm), nhưng tôi có thể 't làm cho nó tự động theo chiều dọc trung tâm lựa chọn. Và nó không đủ linh hoạt, mục được chọn "di chuyển" thay vì bị khóa vào trung tâm dọc.

2- Tuỳ chỉnh RecyclerView.OnScrollListener

Tôi cố gắng để thích nghi với mã đề xuất here, đó là cho cuộn ngang, bằng cách thay đổi trong RecyclerView.OnScrollListener dòng

allPixelsDate += dx; 

này với sự khác biệt di chuyển dọc:

allPixelsDate += dy; 

Triển khai này n là gần để được làm việc, bởi vì nó chọn mục gần nhất với trung tâm theo chiều dọc của danh sách, nhưng không khóa nó vào trung tâm.

Có thể đạt được kết quả như vậy không? Làm sao?

Để rõ ràng hơn: Tôi muốn đạt được kết quả được hiển thị here lúc 1:10. Việc lựa chọn là "bị khóa" ở trung tâm.

+0

thử mã này để tham khảo [liên kết] (http://developer.samsung.com/s-pen-sdk/samples/Circle-Launcher) – Moinkhan

+0

Tôi đã thực hiện việc này bằng cách sử dụng https://github.com/ai212983/ android-spinnerwheel và tôi nghĩ rằng bạn cần điều này trong dọc Mannner https://github.com/Jaouan/Carousel-Browsing-Example – Nepster

+0

bạn có thể sử dụng phương pháp này theo chiều dọc để đạt được điều này [mở này] (http://stackoverflow.com/a/38411582/2587027) – wadali

Trả lời

10

Bạn chỉ cần sử dụng LinearSnapHelper và phương thức setOnFlingListener (snapHelper) trên RecyclerView của mình.

này được ví dụ làm việc:

LinearSnapHelper snapHelper = new LinearSnapHelper(); 
snapHelper.attachToRecyclerView(recyclerView); 
recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
recyclerView.setOnFlingListener(snapHelper); 

Để có được chọn bánh xe thật bạn cũng sẽ cần phải thêm một số da cho bánh xe của bạn và để tính toán chính xác chiều cao dòng và chiều cao của RecyclerView. Ví dụ nếu bạn muốn hiển thị chỉ có 3 hàng trong bánh xe của bạn, bạn cần chiều cao RecyclerView lớn gấp 3 lần chiều cao hàng.

+1

Tôi đã thử phương pháp bạn đề xuất và có vẻ như hoạt động giống như trong số lần thử của tôi ** 1 **. Những gì tôi đang cố gắng đạt được là loại bỏ bất kỳ hiệu ứng cuộn nào: Nội dung của các hàng sẽ được cập nhật bằng cách cuộn nhưng các hàng không được di chuyển, theo cách chọn lựa đó là "kẹt" và được căn giữa theo chiều dọc. Với 'LinearSnapHelper' nó chỉ thường xuyên cuộn và cố gắng - kém - để chụp con giữa vào giữa cha mẹ của nó (' RecyclerView'). Để hiểu rõ hơn ý tôi, hãy xem https://www.youtube.com/watch?v=rercnPOELvs tại 1:10 – Vektor88

+0

@ Vektor88 Bạn muốn người dùng thay đổi mục đã chọn như thế nào? Bằng cách chạy trốn hay không? – lobzik

+0

Có, hãy xem video. Tôi muốn fling chỉ gây ra cập nhật của các hàng và không có di chuyển di chuyển. – Vektor88

Các vấn đề liên quan