У меня есть один OnDragListener
Я отбрасываю представления на этом слушателе с помощью Onlongclick
представлений, но проблема, которую я пытаюсь решить, заключается в том, что я хочу ограничить представление, которое будет размещено вне представления макета, его нельзя разместить даженемного снаружи в макете для различных параметров видов (с точки зрения разной длины и ширины перетаскиваемого объекта) также пытаюсь получить местоположение текущих изменяющихся координат времени выполнения xy в полях ввода, в то время как вид перетаскивается при перетаскиваниимакет слушателя
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imgVW = (ImageView) findViewById(R.id.imageView);
final TextView txtVW = (TextView) findViewById(R.id.textView);
txtVW.setOnLongClickListener(this);
imgVW.setOnLongClickListener(this);
findViewById(R.id.layout3).setOnDragListener(this);
}
@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
if (event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
return true;
}
return false;
case DragEvent.ACTION_DRAG_ENTERED:
v.invalidate();
return true;
case DragEvent.ACTION_DRAG_LOCATION:
return true;
case DragEvent.ACTION_DRAG_EXITED:
v.invalidate();
return true;
case DragEvent.ACTION_DROP:
ClipData.Item item = event.getClipData().getItemAt(0);
String dragData = item.getText().toString();
Toast.makeText(this, "Dragged data is " + dragData, Toast.LENGTH_SHORT).show();
float X=event.getX();
float Y=event.getY();
v.invalidate();
View vw = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) vw.getParent();
owner.removeView(vw);
RelativeLayout container = (RelativeLayout) v;
vw.setX(X-(vw.getWidth()/2));
vw.setY(Y-(vw.getHeight()/2));
container.addView(vw);
return true;
case DragEvent.ACTION_DRAG_ENDED:
v.invalidate();
if (event.getResult()) {
Toast.makeText(this, "The drop was handled.", Toast.LENGTH_SHORT).show();
}
else
Toast.makeText(this, "The drop didn't work.", Toast.LENGTH_SHORT).show();
return true;
default:
Log.e("DragDrop Example", "Unknown action type received by OnDragListener.");
break;
}
return true;
}
@Override
public boolean onLongClick(View v) {
ClipData.Item item = new ClipData.Item((CharSequence) v.getTag());
String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
ClipData data = new ClipData(v.getTag().toString(), mimeTypes, item);
View.DragShadowBuilder dragshadow = new View.DragShadowBuilder(v);
v.startDrag(data
, dragshadow
, v
, 0
);
return true;
}
не хочу, чтобы его размещали вне макета, как это
Я хочу, чтобы пользователь размещал представления полностью внутри макета, как это