O framework de arrastar e soltar do Android permite adicionar recursos interativos de arrastar e soltar
ao seu app. Com o recurso de arrastar e soltar, os usuários podem copiar ou mover texto,
imagens, objetos e qualquer conteúdo que possa ser representado por um URI, de um
View para outro em um app ou entre apps
no modo de várias janelas.
Figura 1. Arrastar e soltar em um app.
Figura 2. Arrastar e soltar entre apps.
O framework inclui uma classe de eventos de arrastar, listeners de arrastar e classes e
métodos auxiliares. Embora tenha sido projetado principalmente para permitir a transferência de dados, você pode
usar o framework para outras ações da interface. Por exemplo, você pode criar um app que
mistura cores quando o usuário arrasta um ícone colorido sobre outro. No entanto, o
restante do documento descreve o framework de arrastar e soltar no contexto da transferência de
dados.
Informações gerais
Há alguns elementos envolvidos no processo de arrastar.
Origem da ação de arrastar: a visualização do ponto inicial do processo de arrastar e soltar.
Destino de soltar: uma visualização que pode aceitar os dados de arrastar.
Sombra de arrastar:
uma sombra de arrastar é uma representação
dos dados que estão sendo arrastados e é visível para os usuários.
Eventos de arrastar:
conforme o usuário move a sombra de arraste sobre o
layout do app, o sistema envia eventos de arrastar para os listeners de eventos de arrastar e
os métodos de callback associados aos objetos View no layout.
Uma operação de arrastar e soltar começa quando o usuário faz um gesto de interface que o app
reconhece como um sinal para começar a arrastar dados. Em
resposta, o app notifica o sistema de que uma operação de arrastar e soltar está
iniciando. O sistema chama o
app de novo para receber uma sombra de arrastar e a mostrar aos usuários durante o processo de arrastar e soltar.
À medida que o usuário move a ação de arrastar sobre o layout do app, o sistema envia eventos
de arrastar para os listeners de eventos de arrastar e métodos de callback
associados aos objetos View no layout. Se o usuário soltar a ação de arrastar
sobre um destino de soltar, o sistema enviará os dados a ele. A operação de arrastar e soltar
termina quando o usuário solta a sombra da ação de arrastar, mesmo que ela não esteja
em um destino de soltar.
Como alternativa, implemente o recurso de arrastar e soltar com visualizações do Android. Isso permite
que os desenvolvedores tenham mais controle sobre os detalhes.
Amostras de arrastar e soltar: contém várias maneiras de implementar o recurso de arrastar e soltar e aceitar rich media.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-26 UTC.
[null,null,["Última atualização 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."]]