【发布时间】:2019-10-31 07:33:27
【问题描述】:
我有一个OnDragListener 我通过Onlongclick 视图在此侦听器上放置视图,但我试图解决的问题是我想限制视图放置在布局视图之外,甚至不能放置视图的不同参数的布局稍微有点外(根据可拖动对象的不同长度和宽度)
当视图在 on drag listener 布局上拖动时,我还试图在输入框中获取当前更改的运行时坐标 x y 的位置
@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;
}
dont want to be placed out of layout like this
【问题讨论】:
-
@VedprakashWagh,如果你能帮上忙,先生
标签: android layout view drag out