Reconhecer um gesto de ponteiro
Um reconhecedor de gestos de ponteiro do .NET MAUI (interface do usuário de aplicativo multiplataforma do .NET) detecta quando o ponteiro entra, sai e se move dentro de uma exibição e é implementado com a classe PointerGestureRecognizer. Essa classe define as seguintes propriedades:
- PointerEnteredCommand, do tipo ICommand, que é o comando a ser invocado quando o ponteiro entra na área delimitadora da exibição.
- PointerEnteredCommandParameter, do tipo
object
, que é o parâmetro que é passado para PointerEnteredCommand. - PointerExitedCommand, do tipo ICommand, que é o comando a ser invocado quando o ponteiro que está na área delimitadora do modo de exibição deixa essa área delimitadora.
- PointerExitedCommandParameter, do tipo
object
, que é o parâmetro que é passado para PointerExitedCommand. - PointerMovedCommand, do tipo ICommand, que é o comando a ser invocado quando o ponteiro se move enquanto permanece dentro da área delimitadora da exibição.
- PointerMovedCommandParameter, do tipo
object
, que é o parâmetro que é passado para PointerMovedCommand. - PointerPressedCommand, do tipo ICommand, que é o comando a ser invocado quando o ponteiro inicia um pressionamento dentro da exibição.
- PointerPressedCommandParameter, do tipo
object
, que é o parâmetro passado para PointerPressedCommand. - PointerReleasedCommand, do tipo ICommand, que é o comando a ser invocado quando o ponteiro que iniciou anteriormente um pressionamento é liberado, estando dentro da exibição.
- PointerReleasedCommandParameter, do tipo
object
, que é o parâmetro passado para PointerReleasedCommand.
Essas propriedades são apoiadas por objetos BindableProperty, o que significa que podem ser alvos de associações de dados e ser estilizada.
A classe PointerGestureRecognizer também define os seguintes eventos:
- PointerEntered, que é gerado quando o ponteiro entra na área delimitadora da exibição.
- PointerExited, que é gerado quando o ponteiro que está na área delimitadora da exibição deixa essa área delimitadora.
- PointerMoved, que é gerado quando o ponteiro se move enquanto permanece dentro da área delimitadora da exibição.
- PointerPressed, que é gerado quando o ponteiro inicia um pressionamento dentro da exibição.
- PointerReleased, que é gerado quando o ponteiro que iniciou anteriormente um pressionamento é liberado, enquanto dentro da exibição.
Um objeto PointerEventArgs acompanha os eventos e define uma propriedade PlatformArgs do tipo PlatformPointerEventArgs, que fornece acesso a argumentos específicos da plataforma para o evento.
No Android, a classe PlatformPointerEventArgs define as seguintes propriedades:
Sender
, do tipo View, representa a exibição nativa anexada ao evento.MotionEvent
, do tipo MotionEvent, indica o evento nativo ou o manipulador anexado à exibição.
Além disso, o objeto PointerEventArgs define um método GetPosition que retorna um objeto Point?
que representa a posição do ponteiro quando o gesto foi detectado. Para obter mais informações sobre o método GetPosition, consulte Obter a posição do gesto.
Importante
O reconhecimento de gestos de ponteiro tem suporte no Android, iPadOS, Mac Catalyst e Windows.
O MAUI do .NET também define um estado visual PointerOver
. Esse estado pode alterar a aparência visual de uma exibição quando ela tem um cursor do mouse pairando sobre ela, mas não é pressionada. Para obter mais informações, confira Estados visuais.
Criar um PointerGestureRecognizer
Para fazer um View reconhecer gestos de ponteiro, crie um objeto PointerGestureRecognizer, manipule os eventos necessários e adicione o reconhecedor de gestos à coleção GestureRecognizers na exibição. Como alternativa, crie um objeto PointerGestureRecognizer e associe os comandos necessários às implementações de ICommand e adicione o reconhecedor de gestos à coleção GestureRecognizers na exibição.
O exemplo de código a seguir mostra um PointerGestureRecognizer anexado a um Image. O PointerGestureRecognizer usa eventos para responder à detecção de gestos de ponteiro:
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<PointerGestureRecognizer PointerEntered="OnPointerEntered"
PointerExited="OnPointerExited"
PointerMoved="OnPointerMoved" />
</Image.GestureRecognizers>
</Image>
O código para os manipuladores de eventos precisa ser adicionado ao arquivo code-behind:
void OnPointerEntered(object sender, PointerEventArgs e)
{
// Handle the pointer entered event
}
void OnPointerExited(object sender, PointerEventArgs e)
{
// Handle the pointer exited event
}
void OnPointerMoved(object sender, PointerEventArgs e)
{
// Handle the pointer moved event
}
Este é o código C# equivalente:
PointerGestureRecognizer pointerGestureRecognizer = new PointerGestureRecognizer();
pointerGestureRecognizer.PointerEntered += (s, e) =>
{
// Handle the pointer entered event
};
pointerGestureRecognizer.PointerExited += (s, e) =>
{
// Handle the pointer exited event
};
pointerGestureRecognizer.PointerMoved += (s, e) =>
{
// Handle the pointer moved event
};
Image image = new Image();
image.GestureRecognizers.Add(pointerGestureRecognizer);
Obter a posição do gesto
A posição na qual ocorreu um gesto de ponteiro pode ser obtida chamando o método GetPosition em um objeto PointerEventArgs. O método GetPosition aceita um argumento Element?
e retorna uma posição como um objeto Point?
:
void OnPointerExited(object sender, PointerEventArgs e)
{
// Position inside window
Point? windowPosition = e.GetPosition(null);
// Position relative to an Image
Point? relativeToImagePosition = e.GetPosition(image);
// Position relative to the container view
Point? relativeToContainerPosition = e.GetPosition((View)sender);
}
O argumento Element?
define o elemento em relação ao qual a posição deve ser obtida. Fornecer um valor null
como esse argumento significa que o método GetPosition retorna um objeto Point?
que define a posição do gesto de ponteiro dentro da janela.