拖放多个Android项目

时间:2015-01-10 20:58:16

标签: android android-layout drag-and-drop

我试图拖放多个项目。

目前,我在线性布局中定义了一组图像按钮,另一组在单独的线性布局中定义。

我想这样做,如果您从不在布局底部的按钮拖动,它将拖动它下面的所有项目。

使用股票拖放代码(下方),它只允许我拖动一个。

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;
    }

}

1 个答案:

答案 0 :(得分:0)

我最终通过了解很多关于视图,资源和布局来解决这个问题。

我写了一个函数,找到用户点击下面的所有ImageButtons,并将它们全部设置为不可见。然后,我在用户单击的线性布局中创建了一个新的线性布局,并将其传递到“拖动阴影”构建器中。

一旦进入ACTION_DROP部分,我只是引用全局变量来确定用户是否放入一个或多个ImageButtons,并相应地处理它们。