ItemTouchHelper сделать перетаскиваемый элемент переместить нижний колонтитул фрагмента

У меня есть RecyclerView с ItemTouchHelper. RecyclerView представляет собой сетку 2/2, и на ней есть верхний и нижний колонтитулы. Когда пользователь поднимает элемент, я хочу, чтобы этот элемент мог нависнуть над нижним колонтитулом. Тем не менее, я не хочу, чтобы другие элементы в просмотре ресайклера могли быть видны через нижний колонтитул.

Итак, сначала я попытался добавить clipChildren и clipPadding, но это создало ситуацию, когда элементы RecyclerView прокручивались по нижнему колонтитулу, что было проблемой. Я попытался добавить возвышение к элементу и принестиToFont, но они никогда не работали, потому что просмотр recycler все еще находился за нижним колонтитулом, я попытался добавить, чтобы вывести на передний план просмотр самого ресайклера, но затем снова все элементы становятся перед нижним колонтитулом, а не просто перетащил один, есть ли у кого-нибудь другие идеи о том, как это решить?

Ответы

Ответ 1

Я бы начал, убедившись, что у вашего ресайклера есть android:clipChildren="false". Таким образом, вам не нужно, чтобы recyclerview был буквально перекрыт нижним колонтитулом - он может заканчиваться над нижним колонтитулом и до сих пор позволяет детям рисовать за пределами границ.

Если у вас есть статический нижний колонтитул, вы можете попытаться вызвать bringToFront, когда вы определяете ось y, перемещается достаточно далеко, чтобы ваш текущий элемент пересекался нижний колонтитул. Затем, когда вы переходите из диапазона или когда свиток перезаписи вообще, верните нижний колонтитул на передний план. Однако это было бы особенно подвержено ошибкам; немного взломать.

Edit:

Другой подход заключался бы в том, чтобы полностью разорвать соединение между перетаскиваемым элементом и recyclerview (это займет немного работы над частью капли), шаги будут примерно такими:

- Start dragging item i
- store a reference to i.getParent() and the view index within its parent
- i.getParent().removeView(i) //detach the item from the recycler (or create clone)
- layout.addView(i) //add item onto main layout containing footer, allowing overlap

- when dropped, use the parent reference and index to reattach the item
- then work out where the item was released

Ответ 2

Предложение, в моем обычном TouchHelperCallback я переопределил метод onMove и проигнорировал проверку того, являются ли источники и тип переменных одинаковыми. Поэтому, когда я перетаскивал элемент над заголовком, я мог бы поместить элемент над ним.

@Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target) {
        //if (source.getItemViewType() != target.getItemViewType()) {
        //    return false;
        //}

        // Notify the adapter of the move
        mAdapter.onItemMove(source.getAdapterPosition(), target.getAdapterPosition());
        return true;
    }

Не изменен учебник об уменьшении перетаскивания. Я взял из: https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf#.jl59rui0l