Перетаскивание в Xamarin. Android

Поддержка перетаскивания расширяет возможности пользовательского интерфейса, позволяя перемещать все типы входных данных, поддерживаемых Surface Duo.

В этом примере показано, как реализовать перетаскивание в приложении Android.

Пример пользовательского интерфейса приложения с использованием возможности перетаскивания

Значение ключа

Перетаскивание позволяет пользователю без усилий перемещать данные в пределах одного приложения или между разными приложениями на двух экранах.

Типы приложений с поддержкой этого режима:

  • Приложения, содержащие текст или изображения.

См. сведения о возможности перетаскивания в руководстве по использованию двухэкранных устройств.

Ознакомьтесь с нашим примером

Получите Пример перетаскивания на GitHub

Общие сведения об исходном коде

В этих фрагментах кода показано, как реализовать возможность перетаскивания.

  1. Свяжите dragListener с целевым представлением.

    View.Drag += View_Drag;
    
  2. Реализуйте ACTION_DROP в onDrag().

    void View_Drag(object sender, View.DragEventArgs e)
    {
        if (e.Event.Action == DragAction.Drop)
        {
            e.Handled = true;
            // ...
        }
    }
    
  3. Получите URI из DragEvent.

    e.Event.ClipData.GetItemAt(0).Uri;
    
  4. Запросите разрешения для этого URI.

    RequestDragAndDropPermissions(e.Event);
    
  5. Создайте запрос к ContentProvider, чтобы получить перетаскиваемый элемент.

    var metadata = ContentResolver.Query(uri, new [] { OpenableColumns.DisplayName, OpenableColumns.Size}, null, null, null))
    var file = ContentResolver.OpenFileDescriptor(uri, mode: "r");