Вы можете попробовать несколько вещей. В моем приложении вот как я это сделал:
public boolean onLongClick(View v)
{
dragged_view = v;
removeTransition(v);
ClipData data = ClipData.newPlainText("path", ((TextView)v.findViewById(R.id.file_name)).getText());
v.startDrag(data, new Shadow(v, c), v, 0);
return true;
}
Я запускаю перетаскивание даже при длинном щелчке. У меня есть глобальная переменная View
с именем dragged_view
, чтобы я мог ссылаться на нее ACTION_DROP
.
Другая вещь, которую я сделал, передала View
как объект локального состояния в методе startDrag()
(это третий аргумент). Затем я могу получить его через getLocalState()
и использовать его для справки, как в следующем фрагменте кода:
item_drag_listener = new View.OnDragListener(){
public boolean onDrag(View v, DragEvent event){
if (event.getLocalState() == v)
return true;
overlays = v.findViewById(R.id.copy_move_overlays);
switch (event.getAction()){
case DragEvent.ACTION_DRAG_ENTERED:
overlays.setVisibility(View.VISIBLE);
break;
case DragEvent.ACTION_DRAG_EXITED:
overlays.setVisibility(View.INVISIBLE);
break;
case DragEvent.ACTION_DRAG_STARTED:
return true;
case DragEvent.ACTION_DROP:
return true;
}
return false;
}
};