Rozpoznawanie gestu wskaźnika

Funkcja rozpoznawania gestu wskaźnika .NET z wieloma platformami (.NET MAUI) wykrywa, kiedy wskaźnik wchodzi, zamyka i przenosi się w widoku i jest implementowany z klasą PointerGestureRecognizer . Ta klasa definiuje następujące właściwości:

Te właściwości są wspierane przez BindableProperty obiekty, co oznacza, że mogą być obiektami docelowymi powiązań danych i stylizowanymi.

Klasa PointerGestureRecognizer definiuje również następujące zdarzenia:

  • PointerEntered, jest to podniesione, gdy wskaźnik przechodzi do obszaru ograniczenia widoku.
  • PointerExited, jest to podniesione, gdy wskaźnik, który znajduje się w obszarze ograniczenia widoku, pozostawia ten obszar ograniczenia.
  • PointerMoved, jest to podniesione, gdy wskaźnik porusza się podczas pozostawania w obszarze ograniczenia widoku.
  • PointerPressed, jest wywoływany, gdy wskaźnik inicjuje naciśnięcie w widoku.
  • PointerReleased, jest to zgłaszane, gdy wskaźnik, który wcześniej zainicjował naciśnięcie, jest zwalniany, podczas gdy w widoku.

Obiekt PointerEventArgs towarzyszy zdarzeniu i definiuje PlatformArgs właściwość typu PlatformPointerEventArgs , która zapewnia dostęp do argumentów specyficznych dla platformy dla zdarzenia.

W systemie Android PlatformPointerEventArgs klasa definiuje następujące właściwości:

  • Sender, typu View, reprezentuje widok natywny dołączony do zdarzenia.
  • MotionEvent, typu MotionEvent, wskazuje natywne zdarzenie lub procedurę obsługi dołączoną do widoku.

Ponadto PointerEventArgs obiekt definiuje metodę zwracającą GetPositionPoint? obiekt reprezentujący położenie wskaźnika po wykryciu gestu. Aby uzyskać więcej informacji na temat GetPosition metody, zobacz Pobieranie położenia gestu.

Ważne

Rozpoznawanie gestów wskaźnika jest obsługiwane w systemach Android, iPadOS, Mac Catalyst i Windows.

Program .NET MAUI definiuje również stan wizualizacji PointerOver . Ten stan może zmienić wygląd wizualizacji widoku, gdy znajduje się na nim kursor myszy, ale nie jest naciśnięty. Aby uzyskać więcej informacji, zobacz Stany wizualizacji.

Tworzenie wskaźnikaGestureRecognizer

Aby utworzyć View gesty wskaźnika rozpoznawania, utwórz PointerGestureRecognizer obiekt, obsłuż wymagane zdarzenia i dodaj rozpoznawanie gestów do GestureRecognizers kolekcji w widoku. Alternatywnie utwórz obiekt i powiąż PointerGestureRecognizer wymagane polecenia z ICommand implementacjami, a następnie dodaj rozpoznawanie gestów do GestureRecognizers kolekcji w widoku.

Poniższy przykład kodu przedstawia PointerGestureRecognizer dołączony element do elementu Image. Funkcja PointerGestureRecognizer używa zdarzeń do reagowania na wykrywanie gestów wskaźnika:

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

Kod procedur obsługi zdarzeń powinien zostać dodany do pliku za pomocą kodu:

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
}

Równoważny kod języka C# to:

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

Uzyskiwanie położenia gestu

Położenie, w którym wystąpił gest wskaźnika, można uzyskać przez wywołanie GetPosition metody w PointerEventArgs obiekcie. Metoda GetPosition akceptuje Element? argument i zwraca pozycję jako Point? obiekt:

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

Argument Element? definiuje element, z który należy uzyskać pozycję względem. Podanie wartości jako tego argumentu null oznacza, że GetPosition metoda zwraca Point? obiekt, który definiuje położenie gestu wskaźnika wewnątrz okna.