Il framework di trascinamento di Android consente di aggiungere funzionalità di trascinamento interattive alla tua app. Grazie al trascinamento, gli utenti possono copiare o spostare testo, immagini, oggetti e qualsiasi contenuto che può essere rappresentato da un URI, da un View a un altro all'interno di un'app o tra app in modalità multi-finestra.
Figura 1. Trascina all'interno di un'app.
Figura 2. Trascinamento di un'app all'altra.
Il framework include una classe di eventi di trascinamento, listener di trascinamento, nonché classi e metodi helper. Sebbene progettato principalmente per consentire il trasferimento di dati, puoi utilizzare il framework per altre azioni dell'interfaccia utente. Ad esempio, puoi creare un'app che
combini i colori quando l'utente trascina un'icona di un colore su un'altra icona. Tuttavia, il resto del documento descrive il framework di trascinamento dei dati nel contesto del trasferimento dei dati.
Panoramica
Il processo di trascinamento è costituito da alcuni elementi.
Origine di trascinamento: la visualizzazione del punto iniziale del processo di trascinamento.
Rilascia target: una visualizzazione che può accettare i dati di trascinamento.
Ombra di trascinamento:
un'ombra di trascinamento è una rappresentazione
dei dati trascinati ed è visibile agli utenti.
Eventi di trascinamento:
quando l'utente sposta l'ombra di trascinamento sul layout dell'app, il sistema invia eventi di trascinamento ai listener di eventi di trascinamento e ai metodi di callback associati agli oggetti View nel layout.
Un'operazione di trascinamento inizia quando l'utente esegue un gesto dell'interfaccia utente che la tua app riconosce come segnale per iniziare a trascinare i dati. In risposta, l'app comunica al sistema che è in corso un'operazione di trascinamento della selezione. Il sistema richiama la tua
app per ottenere un'ombra di trascinamento e mostrarla agli utenti durante il processo di trascinamento.
Quando l'utente sposta l'ombra di trascinamento sul layout dell'app, il sistema invia gli eventi di trascinamento ai listener di eventi di trascinamento e ai metodi di callback associati agli oggetti View nel layout. Se l'utente rilascia l'ombra di trascinamento su un target, il sistema vi invia i dati. L'operazione di trascinamento termina quando l'utente rilascia l'ombra di trascinamento, indipendentemente dal fatto che si trovi o meno sopra una destinazione.
Campioni di trascinamento che contengono vari modi per implementare il trascinamento e l'accettazione di contenuti rich media.
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-26 UTC.
[null,null,["Ultimo aggiornamento 2025-07-26 UTC."],[],[],null,["# Enable drag and drop\n\nTry the Compose way \nJetpack Compose is the recommended UI toolkit for Android. Learn how to use drag and drop in Compose. \n[Drag and drop →](/develop/ui/compose/touch-input/user-interactions/drag-and-drop) \n\n\u003cbr /\u003e\n\n| **Note:** See the improved method of implementing drag and drop in [Receive rich\n| content](/develop/ui/views/receive-rich-content) for a better UX and improved maintainability of your code.\n\nThe Android drag-and-drop framework lets you add interactive drag-and-drop\ncapabilities to your app. With drag and drop, users can copy or move text,\nimages, objects, and any content that can be represented by a URI, from one\n[`View`](/reference/android/view/View) to another within an app, or between apps\nin [multi-window mode](/develop/ui/views/touch-and-input/drag-drop/multi-window#DragPermissionsMultiWindow).\n\n|--------------------------------------------|-------------------------------------------|\n| | |\n| **Figure 1.** Drag and drop within an app. | **Figure 2.** Drag and drop between apps. |\n\nThe framework includes a drag event class, drag listeners, and helper classes\nand methods. Although primarily designed to enable the transfer of data, you can\nuse the framework for other UI actions. For example, you can create an app that\nmixes colors when the user drags a color icon over another icon. However, the\nrest of document describes the drag-and-drop framework in the context of data\ntransfer.\n\nOverview\n--------\n\nThere are a few elements involved in the drag process.\n\n1. Drag source: The start point view of drag-and-drop process.\n\n2. Drop target: A view that can accept the drag data.\n\n3. [Drag shadow](/develop/ui/views/touch-and-input/drag-drop/concepts#AboutDragShadowBuilder):\n A *drag shadow* is a representation\n of the data being dragged, it's visible to users.\n\n4. [Drag events](/develop/ui/views/touch-and-input/drag-drop/concepts#AboutDragEvent):\n As the user moves the drag shadow over the\n app's layout, the system sends drag events to the drag event listeners and\n callback methods associated with the `View` objects in the layout.\n\nA drag-and-drop operation starts when the user makes a UI gesture that your app\nrecognizes as a signal to start dragging data. In\nresponse, the app notifies the system that a drag-and-drop operation is\nstarting. The system calls back to your\napp to get a *drag shadow*. and show it to users during drag-and-drop process.\n\nAs the user moves the drag shadow over the app's layout, the system sends drag\nevents to the [drag event listeners and callback methods](/develop/ui/views/touch-and-input/drag-drop/concepts#AboutDragListeners)\nassociated with the `View` objects in the layout. If the user releases the drag\nshadow over a drop target, the system sends the data to it. The drag-and-drop\noperation ends when the user releases the drag shadow, whether or not the drag\nshadow is over a drop target.\n\nTopics\n------\n\n[Key Concepts](/develop/ui/views/touch-and-input/drag-drop/concepts)\n: Understand the drag-and-drop process.\n\n[DropHelper for simplified drag and drop](/develop/ui/views/touch-and-input/drag-drop/drophelper)\n: Learn how to implement drag and drop with `DropHelper`.\n\n[Implement drag and drop with views](/develop/ui/views/touch-and-input/drag-drop/view)\n: Alternatively, implement drag and drop with Android views, this allows\n developers to have more control of the details.\n\n[Drag and drop in multi-window mode](/develop/ui/views/touch-and-input/drag-drop/multi-window)\n: Support drag and drop in multi-window mode, allow objects to move across\n different applications.\n\nAdditional resources\n--------------------\n\n- [Codelab for Drag and Drop](/codelabs/codelab-dnd-views) using views\n- [Drag \\& drop for seamless multitasking](https://www.youtube.com/watch?v=WOm76wSfkbU) video\n- [Drag and Drop Samples](https://github.com/android/platform-samples/tree/main/samples/user-interface/draganddrop) which contains various ways to implement drag and drop along with accepting rich media."]]