Просмотр перетаскивания за пределами Recyclerview
Что я хочу достичь: я хочу иметь представление внутри прокручиваемого макета (Recyclerview
с GridlayoutManager
) с элементами (Views) в нем. Перетаскивание элемента внутри Recyclerview
должно регулировать положение значка и заменять его другими элементами. Когда начинается перетаскивание, значок над Recyclerview
изменится на значок корзины, а перетаскивание изображения на этот значок удалит его из этого Recyclerview
.
![View5 был удален, а другие представления перемещены вдоль]()
Я пробовал этот отличный учебник, но я не нашел способ обработки перетаскивания вне Recyclerview
как ItemTouchHelper.Callback
использует только Recycler.ViewHolder
элементы как возможные цели.
Метод interpolateOutOfBoundsScroll()
дает обратную связь, если представление выходит за границы, но возвращает только общий размер, который находится вне экрана, но не содержит координат. Кроме того, попытка перетащить представление из Recyclerview
всегда приводит к разрезанию вида, где он проходит границы Recyclerview
.
Есть ли у кого-нибудь идея, как я мог бы достичь этого эффекта?
Ответы
Ответ 1
Вы связаны границами RecyclerView
. У вас есть несколько вариантов:
-
Сделайте высоту раскладки RecyclerView
до match_parent
и, чтобы быть наверху вашего верхнего вида (это Toolbar
?) и добавить липкий заголовок того же размера и иметь пустой прозрачный макет, Таким образом, вы можете перетащить их и увидеть, что там плавает.
-
Вместо того, чтобы перетаскивать элемент в значок мусора, который находится слишком близко к элементу верхнего права, сделайте длинный щелчок, чтобы выбрать элемент (и применить сигнал как галочку или красную маску ) и сделать мусор может появиться и удалить uppon click (и, возможно, разрешить удаление нескольких элементов)
Ответ 2
Это можно сделать просто, установив этот атрибут для родителя RecyclerView:
android:clipChildren="false"
Редактировать: спасибо Adam Katz, я не знаю почему, но иногда вам нужно добавить это в RecyclerView, чтобы заставить его работать:
android:clipToPadding="false"