У меня есть несколько советов о том, как перетаскивать приложения, работающие на уровне API 8 и выше. Я изучил исходный код модуля Android Launcher и узнал о структуре drag-drop, которую они создали для этого. Я обнаружил, что это хороший фундамент, на котором можно строить. Я написал подробности о ключевых классах (DragSource, DropTarget, DragLayer, DragController) в серии статей в моем блоге. Решение слишком длинное, чтобы публиковать здесь, поэтому я отсылаю вас к этим заметкам:
(a) Перемещение видов в Android - часть 2, перетаскивание - описывает базовую среду и включает в себя демонстрационное приложение. Поскольку я в первую очередь занимался изучением перетаскивания, я использовал устаревший класс AbsoluteLayout. Продолжение этого (Часть 3) тоже стоит рассмотреть, поскольку оно развивает понятие DropTarget.
(b) Drag-Drop для Android GridView - демонстрационное приложение, показывающее, как использовать среду перетаскивания для видов сетки. Более того, он показывает, как обойтись без AbsoluteLayout. В этом случае DragLayer и другие классы знают больше о типах макетов, с которыми они работают.
Демонстрационные приложения иллюстрируют изображения и текстовые представления, которые перетаскиваются. Базовый код является совершенно общим: любой вид можно перетаскивать. Проблема, с которой вы столкнетесь при перетаскивании кнопок, заключается в том, чтобы убедиться, что начало операции перетаскивания не будет перепутано с обычной обработкой нажатий кнопок. Попробуйте использовать длинный щелчок для запуска последовательности перетаскивания.