Share via


Riconoscere un movimento del puntatore

Un sistema di riconoscimento del movimento del puntatore dell'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI) rileva quando il puntatore entra, e esce e si sposta all'interno di una visualizzazione e viene implementato con la PointerGestureRecognizer classe . Questa classe definisce le proprietà seguenti:

Queste proprietà sono supportate da BindableProperty oggetti, il che significa che possono essere destinazioni di data binding e stili.

La PointerGestureRecognizer classe definisce anche gli eventi seguenti:

  • PointerEntered, generato quando il puntatore entra nell'area di delimitazione della visualizzazione.
  • PointerExited, generato quando il puntatore che si trova nell'area di delimitazione della visualizzazione lascia tale area di delimitazione.
  • PointerMoved, generato quando il puntatore si sposta mentre rimane all'interno dell'area di delimitazione della visualizzazione.
  • PointerPressed, generato quando il puntatore avvia una pressione all'interno della visualizzazione.
  • PointerReleased, generato quando il puntatore che ha avviato in precedenza una stampa viene rilasciato, mentre si trova all'interno della visualizzazione.

Un PointerEventArgs oggetto accompagna gli eventi e definisce una PlatformArgs proprietà di tipo PlatformPointerEventArgs che fornisce l'accesso a argomenti specifici della piattaforma per l'evento.

In Android la PlatformPointerEventArgs classe definisce le proprietà seguenti:

  • Sender, di tipo View, rappresenta la visualizzazione nativa associata all'evento.
  • MotionEvent, di tipo MotionEvent, indica l'evento nativo o il gestore associato alla vista.

Inoltre, l'oggetto PointerEventArgs definisce un GetPosition metodo che restituisce un Point? oggetto che rappresenta la posizione del puntatore quando è stato rilevato il movimento. Per altre informazioni sul GetPosition metodo, vedere Ottenere la posizione del movimento.

Importante

Il riconoscimento dei movimenti del puntatore è supportato in Android, iPadOS, Mac Catalyst e Windows.

.NET MAUI definisce anche uno PointerOver stato di visualizzazione. Questo stato può modificare l'aspetto visivo di una visualizzazione quando è posizionato il cursore del mouse su di esso, ma non viene premuto. Per altre informazioni, vedere Stati di visualizzazione.

Creare un puntatoreGestureRecognizer

Per eseguire movimenti View del puntatore di riconoscimento, creare un PointerGestureRecognizer oggetto, gestire gli eventi necessari e aggiungere il riconoscimento movimento alla GestureRecognizers raccolta nella visualizzazione. In alternativa, creare un PointerGestureRecognizer oggetto e associare i comandi necessari alle ICommand implementazioni e aggiungere il riconoscimento movimento alla GestureRecognizers raccolta nella visualizzazione.

Nell'esempio di codice seguente viene illustrato un PointerGestureRecognizer oggetto associato a un oggetto Image. PointerGestureRecognizer Usa gli eventi per rispondere al rilevamento dei movimenti del puntatore:

<Image Source="dotnet_bot.png">
    <Image.GestureRecognizers>
        <PointerGestureRecognizer PointerEntered="OnPointerEntered"
                                  PointerExited="OnPointerExited"
                                  PointerMoved="OnPointerMoved" />
  </Image.GestureRecognizers>
</Image>

Il codice per i gestori eventi deve essere aggiunto al file 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
}

Il codice C# equivalente è il seguente:

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);

Ottenere la posizione del movimento

La posizione in cui si è verificato un movimento puntatore può essere ottenuta chiamando il GetPosition metodo su un PointerEventArgs oggetto . Il GetPosition metodo accetta un Element? argomento e restituisce una posizione come Point? oggetto :

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);
}

L'argomento Element? definisce l'elemento a cui deve essere ottenuta la posizione rispetto a . Se si specifica un null valore come argomento, il GetPosition metodo restituisce un Point? oggetto che definisce la posizione del movimento del puntatore all'interno della finestra.