Android 3:拖放视图

时间:2011-06-18 11:16:14

标签: android view drag-and-drop

我正在尝试使用Android新的Drag& Drop框架,我遇到了以下问题:

  • 如何在DragEvent中传递对象名称,以便可以在ACTION_DROP上实例化?
  • 如何将链接传递给现有对象(视图),以便可以将其移动到ACTION_DROP上的新位置?

我在一个Activity中运行,因此Class Sources可用。

2 个答案:

答案 0 :(得分:1)

你可以尝试很多东西。在我的应用程序中,这就是我做到的:

public boolean onLongClick(View v)
    {
    dragged_view = v;       
    removeTransition(v);

    ClipData data = ClipData.newPlainText("path", ((TextView)v.findViewById(R.id.file_name)).getText());
    v.startDrag(data, new Shadow(v, c), v, 0);

    return true;
    }

即使长按一下手势也会触发拖动。我有一个名为View的全局dragged_view变量,以便我可以在ACTION_DROP上引用它。

我做的另一件事是将View作为startDrag()方法中的local state object传递(这是第3个参数)。然后我可以通过getLocalState()获取它并将其用作参考,如此代码段中所示:

item_drag_listener = new View.OnDragListener(){
        public boolean onDrag(View v, DragEvent event){
            if (event.getLocalState() == v)
                return true;
            overlays = v.findViewById(R.id.copy_move_overlays);
            switch (event.getAction()){
                case DragEvent.ACTION_DRAG_ENTERED:
                    overlays.setVisibility(View.VISIBLE);
                    break;
                case DragEvent.ACTION_DRAG_EXITED:
                    overlays.setVisibility(View.INVISIBLE);
                    break;
                case DragEvent.ACTION_DRAG_STARTED:
                    return true;
                case DragEvent.ACTION_DROP:
                    return true;
                }
            return false;
            }
        };

答案 1 :(得分:0)

我通过引入带变量

的DragHandler类来实现拖放视图
View isDraggedNow;

这个变量allwasy包含一个拖动的视图,因此每个类都可以轻松地将它带到DragEvent.ACTION_DRAG_ENTERED