Sdílet prostřednictvím


Rozpoznávání gesta ukazatele

Rozpoznávání gest ukazatele na více platforem .NET (.NET MAUI) rozpozná, když ukazatel vstoupí, ukončí a přesune v zobrazení a implementuje se s PointerGestureRecognizer třídou. Tato třída definuje následující vlastnosti:

Tyto vlastnosti jsou podporovány BindableProperty objekty, což znamená, že mohou být cíle datových vazeb a stylovány.

Třída PointerGestureRecognizer také definuje následující události:

  • PointerEntered, který je vyvolán, když ukazatel přejde do ohraničující oblasti zobrazení.
  • PointerExited, který je vyvolán, když ukazatel, který je v ohraničující oblasti zobrazení, opustí ohraničující oblast.
  • PointerMoved, který je vyvolán, když se ukazatel přesune a zůstane v ohraničující oblasti zobrazení.
  • PointerPressed, který je vyvolán, když ukazatel zahájí stisknutí v zobrazení.
  • PointerReleased, který je vyvolán, když se v zobrazení uvolní ukazatel, který dříve inicioval stisknutí.

Objekt PointerEventArgs doprovází události a definuje PlatformArgs vlastnost typu PlatformPointerEventArgs , která poskytuje přístup k argumentům specifických pro platformu události.

V Androidu PlatformPointerEventArgs třída definuje následující vlastnosti:

  • Sender, typu Viewpředstavuje nativní zobrazení připojené k události.
  • MotionEvent, typu MotionEventoznačuje nativní událost nebo obslužnou rutinu připojenou k zobrazení.

Kromě toho objekt PointerEventArgs definuje metodu GetPosition , která vrací Point? objekt, který představuje pozici ukazatele při zjištění gesta. Další informace o GetPosition metodě naleznete v tématu Získání pozice gesta.

Důležité

Rozpoznávání gest ukazatele je podporováno v systémech Android, iPadOS, Mac Catalyst a Windows.

.NET MAUI také definuje stav vizuálu PointerOver . Tento stav může změnit vzhled zobrazení, když na něj najede kurzor myši, ale není stisknut. Další informace naleznete v tématu Vizuální stavy.

Vytvoření ukazateleGestureRecognizer

Pokud chcete nastavit View gesta rozpoznávání ukazatele, vytvořte PointerGestureRecognizer objekt, zpracujte požadované události a přidejte rozpoznávání gest do GestureRecognizers kolekce v zobrazení. Případně vytvořte PointerGestureRecognizer objekt a vytvořte vazbu požadovaných příkazů k ICommand implementaci a přidejte rozpoznávání gest do GestureRecognizers kolekce v zobrazení.

Následující příklad kódu ukazuje připojenou PointerGestureRecognizer k .Image Pomocí PointerGestureRecognizer událostí reaguje na detekci gest ukazatele:

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

Kód obslužných rutin událostí by se měl přidat do souboru kódu za kódem:

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
}

Ekvivalentní kód jazyka C# je:

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

Získání pozice gesta

Pozici, ve které došlo k gestu ukazatele, lze získat voláním GetPosition metody na objektu PointerEventArgs . Metoda GetPosition přijímá Element? argument a vrací pozici jako Point? objekt:

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? definuje prvek, ke které by měla být pozice získána vzhledem. Zadání null hodnoty jako tohoto argumentu znamená, že GetPosition metoda vrátí Point? objekt, který definuje pozici gesta ukazatele uvnitř okna.