10

Điều tôi muốn đạt được: Tôi muốn có chế độ xem bên trong bố cục có thể cuộn (Recyclerview với GridlayoutManager) bằng các lát (Chế độ xem) trong đó. Kéo và thả một mục bên trong của RecyclerView sẽ điều chỉnh vị trí của biểu tượng và trao đổi với các phần tử khác. Khi quá trình kéo bắt đầu, biểu tượng phía trên RecyclerView sẽ thay đổi thành biểu tượng thùng rác và kéo chế độ xem vào biểu tượng này sẽ xóa biểu tượng này khỏi số RecyclerView này.Kéo và thả xem bên ngoài Recyclerview

Initial stateStarting to drag View5dragging View5 to trash iconView5 was deleted and other Views moved along

tôi đã cố gắng excellent tutorial này, nhưng tôi không tìm thấy một cách làm thế nào để xử lý kéo bên ngoài của Recyclerview như ItemTouchHelper.Callback chỉ sử dụng Recycler.ViewHolder yếu tố như mục tiêu càng tốt.

Phương pháp interpolateOutOfBoundsScroll() đưa ra phản hồi nếu chế độ xem di chuyển ra ngoài ranh giới, nhưng sẽ chỉ trả về tổng kích thước không có màn hình, nhưng không có tọa độ. Ngoài ra, cố gắng kéo chế độ xem ra khỏi Recyclerview luôn dẫn đến việc cắt Chế độ xem nơi nó vượt qua biên giới của Recyclerview.

Có ai có ý tưởng về cách tôi có thể đạt được hiệu ứng này không?

Trả lời

4

Bạn bị ràng buộc bởi các ranh giới RecyclerView. Bạn có một vài lựa chọn:

  1. Hãy chiều cao bố trí các 's RecyclerView-match_parent và được trên đầu trang của view trên của bạn (nó là một Toolbar?) Và thêm một tiêu đề dính có cùng kích thước và có một sản phẩm nào bố cục minh bạch. Bằng cách đó bạn có thể kéo nó và nhìn thấy mục nổi trên đó.

  2. Thay vì kéo một mục vào biểu tượng thùng rác nằm quá gần mục trên bên phải hợp pháp, hãy nhấp chuột dài để chọn mục (và áp dụng tín hiệu như dấu kiểm hoặc mặt nạ màu đỏ) và tận dụng rác thải có thể xuất hiện và xóa uppon nhấp chuột (và có thể cho phép đa mục xóa)

+0

Cảm ơn câu trả lời của bạn! Khung nhìn phía trên là một 'RelativeLayout' có chứa một số' Textviews', 'Imageview' và cũng là' Imageview' sẽ biến thành thùng rác. Tôi thích ý tưởng của bạn với tiêu đề dính. Nếu thùng rác 'Hình ảnh xem trước' là phần tử duy nhất trong tiêu đề dính và không lấp đầy hoàn toàn, có cách nào để ngăn người dùng kéo các chế độ xem đến các vị trí bên cạnh hàng 'Hình ảnh xem trước thùng rác 'không? Tôi sẽ cố gắng này ngay bây giờ – Eve

+0

@Eve chỉ không trao đổi chúng nếu vị trí đích là trong tiêu đề – gilgil28

+0

vẫn suy nghĩ về điều này, là không có cách nào giống như với cách tiếp cận cổ điển từ [Google] (http://developer.android .com/guide/topics/ui/drag-drop.html) để xác định bóng kéo để chỉ có bóng được kéo chứ không phải chính chế độ xem? – Eve

6

Bạn có thể đạt được điều này đơn giản bằng cách thiết lập thuộc tính này cho phụ huynh của RecyclerView:

android:clipChildren="false" 

chỉnh sửa: cảm ơn Adam Katz, tôi không biết tại sao nhưng đôi khi bạn phải thêm nó vào RecyclerView để làm cho nó hoạt động:

android:clipToPadding="false" 
+1

wow Tôi không thể tin rằng không có ai khác đã nhận xét điều này. Chỉ cần thêm, rất hữu ích khi thêm android: clipChildren = "false" android: clipToPadding = "false" –

+0

Bạn có thể giải thích thêm không? Bạn có mã mẫu không? – Rajat