Arrastar e soltar Android: aprimorando a interação do usuário
Neste artigo, você aprenderá como implementar o recurso arrastar e soltar do Android . Você também descobrirá os benefícios de usar esse recurso e as práticas recomendadas para garantir uma experiência de usuário ideal.
O Android Drag and Drop Framework suporta arrastar e soltar em muitos aplicativos. Ele permite que você crie interfaces de usuário intuitivas e envolventes, permitindo que os usuários arrastem e soltem itens dentro ou entre aplicativos. É um recurso amplamente utilizado em aplicativos móveis e da web.
A funcionalidade de arrastar e soltar no Android é baseada nas seguintes classes:
Aulas | Visão geral |
ArrastarShadowBuilder | Essa classe é usada para criar uma representação visual dos dados que estão sendo arrastados. Ele estende a classe View.DragShadowBuilder e substitui o método onDrawShadow() para desenhar a sombra na tela. |
DragEvent | Essa classe representa um evento de arrastar que ocorre durante o processo de arrastar e soltar. Ele contém informações sobre a ação, a posição atual do evento de arrastar e a visualização de que o evento acabou. |
OnDragListener | Essa interface é usada para lidar com eventos de arrastar. Ele contém dois métodos que são onDrag() e onDragEvent(). O método onDrag() é chamado quando o usuário começa a arrastar um item, e o método onDragEvent() é chamado quando ocorre o evento arrastar. |
Processo de arrastar e soltar do Android
O arrastar e soltar do Android envolve as seguintes etapas:
- O usuário inicia a operação de arrastar pressionando e segurando uma visualização. Durante esse evento, o método startDrag() é invocado, o que cria um objeto DragShadowBuilder que mostra visualmente a visualização arrastada.
- Quando o usuário move a view, o sistema gera eventos ACTION_DRAG_ENTERED , indicando que o arrasto entrou em uma nova área. A área de destino onde a exibição pode ser descartada geralmente é destacada por esse evento.
- Em resposta ao usuário mover a visualização, o sistema gera eventos ACTION_DRAG_LOCATION , indicando a posição atual. Neste caso, a representação visual da vista arrastada pode ser atualizada.
- O sistema gera um evento ACTION_DRAG_EXITED quando o usuário move a exibição para fora da área de destino.
- Os eventos ACTION_DROP são gerados quando o usuário libera a visualização sobre a área de destino, indicando que a visualização foi descartada. Usando esse evento, você pode atualizar o estado do aplicativo com base na queda.
- Quando a operação de arrastar termina, o sistema gera um evento ACTION_DRAG_ENDED . Usando este evento, todos os recursos associados ao arrastar podem ser limpos.
A classe DragEvent
No Android , DragEvent representa um evento que ocorre durante as operações de arrastar e soltar.
São fornecidas informações sobre uma operação de arrastar e soltar, incluindo informações sobre a ação, a posição do evento de arrastar e os dados que estão sendo arrastados.
Constantes
Aqui estão as constantes presentes na classe DragEvent :
Constantes | Visão geral |
ACTION_DRAG_STARTED | Introduzido quando uma operação de arrastar é iniciada pela primeira vez. Geralmente, configura a imagem de arrastar, bem como qualquer outro feedback visual. |
ACTION_DRAG_ENTERED | Esta ação é enviada quando uma nova visualização é inserida pela operação de arrastar. Na maioria dos casos, é usado para destacar a exibição sobre a qual os dados estão sendo arrastados. |
ACTION_DRAG_LOCATION | Envia esta ação quando a operação de arrastar se move sobre uma exibição. O feedback visual normalmente é atualizado para refletir a posição atual do arrasto. |
ACTION_DRAG_EXITED | Uma operação de arrastar deixa uma exibição quando esta ação é enviada. Normalmente, isso é usado para remover qualquer feedback visual que foi adicionado à exibição quando a operação foi inserida. |
ACTION_DROP | Envia uma ação quando os dados são soltos em uma exibição. Ele normalmente lida com dados descartados e limpa qualquer feedback visual adicionado durante a operação. |
ACTION_DRAG_ENDED | Uma indicação de que a operação de arrastar e soltar foi concluída. |
Métodos DragEvent
Os métodos da classe DragEvent são examinados abaixo:
Métodos | Visão geral |
getAction() | Retorna o tipo de ação DragEvent . |
getClipData() | Retorna o objeto ClipData associado ao evento de arrastar. |
obterX(), obterY() | Esses métodos retornam as coordenadas X e Y do evento de arrastar em relação à View que recebe o evento de arrastar. |
obterResultado() | Retorna um valor booleano que indica se a queda foi bem-sucedida. |
setResult() | O resultado de arrastar e soltar pode ser definido usando este método. |
getLocalState() | Retorna um Object que representa o estado local da operação de arrastar e soltar. |
setDragShadow() | Use este método para definir um DragShadow personalizado . |
getText() | Retorna os dados de texto associados ao evento de arrastar. |
getClipDescription() | Retorna o objeto ClipDescription associado ao evento de arrastar. |
getDragFlags() | Retorna os sinalizadores associados ao evento de arrastar . |
Ouvindo eventos de arrastar
Precisamos implementar a interface OnDragListener em um aplicativo Android para ouvir eventos de arrastar.
O Android fornece a interface OnDragListener para detectar eventos de arrastar em visualizações.
OnDragListener escuta eventos de arrastar e soltar e está associado à visualização que recebe os dados.
Essa interface fornece dois métodos para implementar:
Métodos | Visão geral |
onDrag() | O método onDrag() é chamado quando ocorre um evento de arrastar. Este método recebe dois parâmetros: a view que recebe o evento de arrastar e o objeto DragEvent que contém os detalhes do evento. |
onDragExited() | Quando um usuário sai dos limites de uma view que recebe eventos de arrastar, esse método é chamado. |
Um breve exemplo de uso do OnDragListener para implementar a funcionalidade de arrastar e soltar no Android é mostrado abaixo.
Primeiro, vamos criar duas visualizações: uma visualização que queremos arrastar e outra que servirá como nosso destino de soltura.
Para este exemplo, usaremos dois objetos TextView. Para facilitar a diferenciação entre as duas visualizações, adicionaremos um desenhável de fundo a cada uma delas.
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/draggable_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Drag me" android:padding="16dp" android:background="@drawable/draggable_background" /> <TextView android:id="@+id/drop_target" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Drop here" android:padding="16dp" android:background="@drawable/drop_target_background" /> </LinearLayout>
Depois de criar as duas exibições, implementaremos a interface OnDragListener para a exibição do destino de soltar.
Ao fazer isso, podemos manipular o evento drop real no método onDrag().
Para lidar com eventos de arrastar específicos, podemos adicionar código ao bloco case apropriado.
TextView draggableText = findViewById(R.id.draggable_text); TextView dropTarget = findViewById(R.id.drop_target); dropTarget.setOnDragListener(new View.OnDragListener() { @Override public boolean onDrag(View v, DragEvent event) { switch (event.getAction()) { case DragEvent.ACTION_DRAG_STARTED: // Code to handle drag started event return true; case DragEvent.ACTION_DRAG_ENTERED: // Code to handle drag entered event return true; case DragEvent.ACTION_DRAG_LOCATION: // Code to handle drag location event return true; case DragEvent.ACTION_DRAG_EXITED: // Code to handle drag exited event return true; case DragEvent.ACTION_DROP: // Code to handle drop event return true; case DragEvent.ACTION_DRAG_ENDED: // Code to handle drag ended event return true; default: return false; } } });
Agora, podemos tornar a exibição arrastável realmente arrastável implementando um View.OnLongClickListener para a exibição arrastável.
Dentro do método onLongClick() , iniciaremos a operação de arrastar criando um objeto View.DragShadowBuilder para fornecer uma representação visual da visualização arrastada e chamando startDragAndDrop(). Este método usa um objeto ClipData e um objeto View.DragShadowBuilder como parâmetros. O objeto ClipData contém os dados a serem arrastados e o objeto View.DragShadowBuilder fornece uma representação visual da exibição arrastada durante a operação de arrastar.
draggableText.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v); v.startDragAndDrop(null, shadowBuilder, null, 0); return true; } });
Práticas recomendadas de arrastar e soltar do Android
Para garantir que a funcionalidade de arrastar e soltar em seu aplicativo seja ideal, é importante seguir estas práticas recomendadas:
- Forneça feedback visual ao usuário durante a operação de arrastar e soltar, como uma dica visual para indicar o destino de soltar.
- Certifique-se de que o recurso de arrastar e soltar seja acessível a usuários com deficiências, fornecendo formas alternativas de interagir com a IU .
- Otimize o recurso de arrastar e soltar para desempenho, minimizando redesenhos e animações desnecessárias.
- Mantenha a consistência no comportamento de arrastar e soltar em todas as exibições e garanta que o usuário possa entender facilmente como usar o recurso.
Vantagens
Algumas das vantagens de arrastar e soltar no Android são:
Vantagens | Visão geral |
Experiência do usuário aprimorada | A funcionalidade de arrastar e soltar pode fornecer uma experiência de usuário mais intuitiva e envolvente, pois permite que os usuários interajam com o conteúdo na tela de maneira natural. |
Fácil manipulação de dados | Com arrastar e soltar, os usuários podem facilmente mover itens ou dados na tela, facilitando a organização, categorização ou exclusão de itens. |
Produtividade aumentada | Ao usar arrastar e soltar, os usuários podem concluir tarefas com mais rapidez e eficiência, especialmente ao lidar com grandes quantidades de dados. |
Compatibilidade com telas sensíveis ao toque | Arrastar e soltar é adequado para telas sensíveis ao toque, pois permite que os usuários manipulem objetos diretamente na tela. |
Neste artigo, você aprendeu como implementar a funcionalidade de arrastar e soltar em seu aplicativo Android. Você descobriu as três classes principais usadas em arrastar e soltar: DragShadowBuilder, DragEvent e OnDragListener. Além disso, passamos pelas etapas envolvidas na implementação de arrastar e soltar em um aplicativo Android.