Я пытаюсь создать простое изображение перетаскивания в андроид-студии. Я могу заставить изображение перемещаться по экрану, оно исчезает, как только я его отпускаю. В консоли я получаю сообщение "Отказ от отчета: false"
Здесь мой код:
ImageView mImageView;
String mString;
private android.widget.RelativeLayout.LayoutParams mLayoutParams;
mImageView.setOnLongClickListener(new View.OnLongClickListener(){
@Override
public boolean onLongClick(View v){
ClipData.Item item = new ClipData.Item((CharSequence)v.getTag());
String[] mimeTypes = {
ClipDescription.MIMETYPE_TEXT_PLAIN
};
ClipData dragData = new ClipData(v.getTag().toString(), mimeTypes, item);
View.DragShadowBuilder myShadow = new View.DragShadowBuilder(mImageView);
v.startDrag(dragData, myShadow, null, 0);
return true;
}
});
mImageView.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
switch(event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
mLayoutParams = (RelativeLayout.LayoutParams)v.getLayoutParams();
Log.d(mString, "Action is DragEvent.ACTION_DRAG_STARTED");
// Do nothing
break;
case DragEvent.ACTION_DRAG_ENTERED:
Log.d(mString, "Action is DragEvent.ACTION_DRAG_ENTERED");
int x_cord = (int) event.getX();
int y_cord = (int) event.getY();
break;
case DragEvent.ACTION_DRAG_EXITED :
Log.d(mString, "Action is DragEvent.ACTION_DRAG_EXITED");
x_cord = (int) event.getX();
y_cord = (int) event.getY();
mLayoutParams.leftMargin = x_cord;
mLayoutParams.topMargin = y_cord;
v.setLayoutParams(mLayoutParams);
break;
case DragEvent.ACTION_DRAG_LOCATION :
Log.d(mString, "Action is DragEvent.ACTION_DRAG_LOCATION");
x_cord = (int) event.getX();
y_cord = (int) event.getY();
break;
case DragEvent.ACTION_DRAG_ENDED :
Log.d(mString, "Action is DragEvent.ACTION_DRAG_ENDED");
// Do nothing
break;
case DragEvent.ACTION_DROP:
Log.d(mString, "ACTION_DROP event");
// Do nothing
break;
default: break;
}
return true;
}
});
mImageView.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(mImageView);
mImageView.startDrag(data, shadowBuilder, mImageView, 0);
mImageView.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
});
}
}