我试图拖放多个项目。
目前,我在线性布局中定义了一组图像按钮,另一组在单独的线性布局中定义。
我想这样做,如果您从不在布局底部的按钮拖动,它将拖动它下面的所有项目。
使用股票拖放代码(下方),它只允许我拖动一个。
private final class MyTouchListener implements View.OnTouchListener {
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
}
else {
return false;
}
}
}
我想我可以通过这里移动多个视图,但老实说,我不太了解它们。
拖放区域(减去我的日志代码和诸如此类的东西)看起来很典型:
class MyDragListener implements View.OnDragListener {
//Drawable enterShape = getResources().getDrawable(R.drawable.shape_droptarget);
//Drawable normalShape = getResources().getDrawable(R.drawable.shape);
@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
View view = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
LinearLayout container = (LinearLayout) v;
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
// do nothing
break;
case DragEvent.ACTION_DRAG_ENTERED:
//v.setBackgroundDrawable(enterShape);
break;
case DragEvent.ACTION_DRAG_EXITED:
//v.setBackgroundDrawable(normalShape);
break;
case DragEvent.ACTION_DROP:
// Dropped, reassign View to ViewGroup
owner.removeView(view);
container.addView(view);
view.setVisibility(View.VISIBLE);
break;
case DragEvent.ACTION_DRAG_ENDED:
//rebuildField(); works well but is clogging up the logs
//v.setBackgroundDrawable(normalShape);
default:
break;
}
return true;
}
}
答案 0 :(得分:0)
我最终通过了解很多关于视图,资源和布局来解决这个问题。
我写了一个函数,找到用户点击下面的所有ImageButtons,并将它们全部设置为不可见。然后,我在用户单击的线性布局中创建了一个新的线性布局,并将其传递到“拖动阴影”构建器中。
一旦进入ACTION_DROP部分,我只是引用全局变量来确定用户是否放入一个或多个ImageButtons,并相应地处理它们。