El framework para arrastrar y soltar de Android te permite agregar funciones interactivas de arrastrar y soltar a tu app. Con la función de arrastrar y soltar, los usuarios pueden copiar o mover texto, imágenes, objetos y cualquier contenido que se pueda representar con un URI, de una View a otra dentro de una app, o entre apps en el modo multiventana.
Figura 1: Arrastra y suelta dentro de una app.
Figura 2: Arrastra y suelta entre apps.
El framework incluye una clase de evento de arrastre, objetos de escucha de arrastre, y clases y métodos auxiliares. Aunque está diseñado principalmente para permitir la transferencia de datos, puedes usar el framework para otras acciones de la IU. Por ejemplo, puedes crear una app que combine colores cuando el usuario arrastre un ícono de color sobre otro ícono. Sin embargo, en el resto del documento se describe el framework de arrastrar y soltar en el contexto de transferencia de datos.
Descripción general
El proceso de arrastre involucra algunos elementos.
Fuente de arrastre: Es la vista de punto de inicio del proceso de arrastrar y soltar.
Destino para soltar: Una vista que puede aceptar los datos de arrastre
Sombra de arrastre: Una sombra de arrastre es una representación de los datos que se arrastran y es visible para los usuarios.
Eventos de arrastre: A medida que el usuario mueve la sombra de arrastre sobre el diseño de la app, el sistema envía eventos de arrastre a los objetos de escucha de eventos de arrastre y a los métodos de devolución de llamada asociados con los objetos View del diseño.
Una operación de arrastrar y soltar comienza cuando el usuario hace un gesto de la IU que tu app reconoce como una señal para comenzar a arrastrar datos. En respuesta, la app notifica al sistema que se está iniciando una operación de arrastrar y soltar. El sistema vuelve a llamar a tu app para obtener una sombra de arrastre y mostrarla a los usuarios durante el proceso de arrastrar y soltar.
A medida que el usuario mueve la sombra de arrastre sobre el diseño de la app, el sistema envía eventos de arrastre a los objetos de escucha de eventos de arrastre y los métodos de devolución de llamada asociados con los objetos View del diseño. Si el usuario suelta la sombra de arrastre sobre un destino para soltar, el sistema envía los datos a ella. La operación de arrastrar y soltar finaliza cuando el usuario suelta la sombra de arrastre, ya sea que esta se encuentre o no sobre un destino para soltar.
Como alternativa, puedes implementar la función de arrastrar y soltar con vistas de Android para que los desarrolladores tengan más control sobre los detalles.
Muestras de arrastrar y soltar, que contiene varias formas de implementar la función de arrastrar y soltar, además de aceptar rich media.
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-26 (UTC)
[null,null,["Última actualización: 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."]]