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:
- PointerEnteredCommand, typu ICommand, który jest poleceniem do wywołania, gdy wskaźnik przechodzi do obszaru ograniczenia widoku.
- PointerEnteredCommandParameter, typu
object
, który jest parametrem przekazanym do PointerEnteredCommand. - PointerExitedCommand, typu ICommand, który jest poleceniem do wywołania, gdy wskaźnik znajdujący się w obszarze ograniczenia widoku pozostawia ten obszar ograniczenia.
- PointerExitedCommandParameter, typu
object
, który jest parametrem przekazanym do PointerExitedCommand. - PointerMovedCommand, typu ICommand, który jest poleceniem do wywołania, gdy wskaźnik porusza się, pozostając w obszarze ograniczenia widoku.
- PointerMovedCommandParameter, typu
object
, który jest parametrem przekazanym do PointerMovedCommand. - PointerPressedCommand, typu ICommand, który jest poleceniem do wywołania, gdy wskaźnik inicjuje naciśnięcie w widoku.
- PointerPressedCommandParameter, typu
object
, który jest parametrem przekazanym do .PointerPressedCommand - PointerReleasedCommand, typu ICommand, który jest poleceniem do wywołania, gdy wskaźnik, który wcześniej zainicjował naciśnięcie, jest zwalniany, podczas gdy w widoku.
- PointerReleasedCommandParameter, typu
object
, który jest parametrem przekazanym do .PointerReleasedCommand
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ą GetPosition Point?
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.