10

Co chcę osiągnąć: Chcę mieć widok wewnątrz przewijanego układu (Recyclerview z GridlayoutManager) z kafelkami (widokami) w nim. Przeciągnięcie i upuszczenie elementu wewnątrz obiektu RecyclerView powinno zmienić położenie ikony i zamienić ją na inne elementy. Po rozpoczęciu przeciągania ikona nad ikoną RecyclerView zmieni się w ikonę kosza, a przeciągnięcie widoku do tej ikony spowoduje usunięcie go z tego RecyclerView.Widok przeciągnij i upuść poza widokiem Recycler

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

Próbowałem to excellent tutorial, ale nie mogę znaleźć sposób, jak radzić przeciągając zewnątrz Recyclerview jako ItemTouchHelper.Callback używa tylko Recycler.ViewHolder elementy jak możliwych celów.

Metoda daje informację zwrotną, jeśli widok przesunie się poza granice, ale zwróci całkowity rozmiar poza ekranem, ale bez współrzędnych. Ponadto próba przeciągnięcia widoku z widoku Recyclerview powoduje zawsze przecięcie widoku, w którym przekracza granice Recyclerview.

Czy ktoś ma pomysł, w jaki sposób mogę osiągnąć ten efekt?

Odpowiedz

4

Jesteś związany granicami RecyclerView. Masz kilka opcji:

  1. Złóż wysokość UKŁAD RecyclerView „s do match_parent i być na szczycie swojej górnej widzenia (jest to Toolbar?) I dodać lepkie nagłówek tej samej wielkości i mają pusty przejrzysty układ. W ten sposób możesz przeciągnąć i zobaczyć pływający tam przedmiot.

  2. Zamiast przeciągać element do ikony kosza na śmieci, która znajduje się zbyt blisko prawowitego prawego górnego elementu, wykonaj długie kliknięcie, aby wybrać element (i zastosować sygnał, taki jak znacznik wyboru lub czerwoną maskę) i sprawiają, że śmieci mogą pojawiać się i usuwać uppon kliknięcia (a może pozwolić wielu elementu usuwanie)

+0

Dzięki za odpowiedź! Górny widok to "RelativeLayout", który zawiera trochę "Textviews", "Imageviews", a także "Imageview", który powinien zamienić się w kosz. Podoba mi się twój pomysł z lepkim nagłówkiem. Jeśli kosz "Widok obrazu" jest jedynym elementem w lepkim nagłówku i nie wypełnia go całkowicie, czy istnieje sposób, aby uniemożliwić użytkownikom przeciąganie widoków do pozycji znajdujących się obok rzędu "Widok obrazu"? Wypróbuję to teraz – Eve

+0

@ Po prostu nie zamieniaj ich, jeśli pozycja docelowa jest w nagłówku – gilgil28

+0

nadal myślisz na ten temat, czy nie ma sposobu, aby z klasycznym podejściem [Google] (http://developer.android .com/guide/topics/ui/drag-drop.html), aby zdefiniować cień przeciągania, aby tylko cień był przeciągany, a nie sam widok? – Eve

6

można osiągnąć to po prostu ustawić ten atrybut dla rodzica RecyclerView:

android:clipChildren="false" 

EDIT: dzięki Adamowi Katzowi, nie wiem dlaczego, ale czasami ty Dodaj to do RecyclerView, aby działało:

android:clipToPadding="false" 
+1

wow Nie mogę uwierzyć, że nikt inny nie skomentował tego. Po prostu dodaje, warto dodać android: clipChildren = "false" android: clipToPadding = "false" –

+0

Czy możesz wyjaśnić więcej? Czy masz przykładowy kod? – Rajat