【问题标题】:Drag and drop multiple items Android拖放多个项目 Android
【发布时间】:2015-01-10 20:58:15
【问题描述】:

我正在尝试拖放多个项目。

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

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

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

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

}

【问题讨论】:

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


    【解决方案1】:

    我最终解决了这个问题,发现了很多关于视图、充气器和布局的信息。

    我编写了一个函数来查找用户单击的下方的所有 ImageButton,并将它们全部设置为不可见。然后,我在用户单击的线性布局中创建了一个新的线性布局,并将其传递给 Drag Shadow 构建器。

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

    【讨论】:

    • 嗨 GeoffM,我也面临同样的问题。我正在尝试您的方法,但是当我尝试在用户单击的 LL 中重新创建一个新的 LL 时,我收到一条错误消息,指出 child already exists ,我应该先删除它们。您声明将它们设置为不可见。你能提供更多细节吗?谢谢
    猜你喜欢
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    相关资源
    最近更新 更多