Просмотр перетаскивания за пределами Recyclerview

Что я хочу достичь: я хочу иметь представление внутри прокручиваемого макета (Recyclerview с GridlayoutManager) с элементами (Views) в нем. Перетаскивание элемента внутри Recyclerview должно регулировать положение значка и заменять его другими элементами. Когда начинается перетаскивание, значок над Recyclerview изменится на значок корзины, а перетаскивание изображения на этот значок удалит его из этого Recyclerview.

Начальное состояние Начало перетаскивания View5 перетаскивание View5 в значок корзины 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"