Android 3: перетаскивание мышью - PullRequest
0 голосов
/ 18 июня 2011

Я пытаюсь использовать новую платформу Android Drag & Drop и сталкиваюсь со следующей проблемой:

  • как передать имя объекта в DragEvent, чтобы его можно было создать в ACTION_DROP?
  • Как передать ссылку на существующий объект (представление), чтобы ее можно было переместить в новое место в ACTION_DROP?

Я работаю внутри одного действия, так что классовые источники доступны.

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Вы можете попробовать несколько вещей. В моем приложении вот как я это сделал:

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() (это третий аргумент). Затем я могу получить его через 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;
            }
        };
0 голосов
/ 19 июня 2011

Я реализовал перетаскивание представления, введя класс DragHandler с переменной

View isDraggedNow;

Эта переменная всегда содержит перетаскиваемое представление, поэтому каждый класс может легко перенести его на DragEvent.ACTION_DRAG_ENTERED

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...