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

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

Начальное состояние Начало перетаскивания View5 Перетаскивание View5 в корзину View5 был удален и другие Представления перемещены вдоль

Я пробовал этот отличный учебник , но я не нашел способа управления перетаскиванием вне Recyclerview поскольку ItemTouchHelper.Callback использует только элементы Recycler.ViewHolder качестве возможных целей.

Метод interpolateOutOfBoundsScroll() дает обратную связь, если представление выходит за границы, но возвращает только общий размер, который находится вне экрана, но не содержит координат. Кроме того, попытка перетащить представление из Recyclerview всегда приводит к разрезанию представления, где он проходит границы Recyclerview .

Кто-нибудь есть идея, как я мог бы достичь этого эффекта?

Вы связаны RecyclerView . У вас есть несколько вариантов:

  1. Сделать высоту макета RecyclerView match_parent и быть наверху вашего верхнего вида (это Toolbar ?) И добавить липкий заголовок того же размера и иметь пустой прозрачный макет. Таким образом, вы можете перетащить их и увидеть, что там плавает.

  2. Вместо того, чтобы перетаскивать элемент в значок мусора, который расположен слишком близко к правому правилу, верхний правый элемент, сделайте длинный щелчок, чтобы выбрать элемент (и применить сигнал как галочку или красную маску) и сделать мусор Появиться и удалить uppon click (и, возможно, разрешить удаление нескольких элементов)

Вы можете достичь этого просто, установив этот атрибут для родителя RecyclerView:

  android:clipChildren="false" 

Редактировать: спасибо Adam Katz, я не знаю, почему, но иногда вам нужно добавить это в RecyclerView, чтобы заставить его работать:

  android:clipToPadding="false"