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:
- PointerEnteredCommand, typu ICommand, což je příkaz, který se má vyvolat, když ukazatel přejde do ohraničující oblasti zobrazení.
- PointerEnteredCommandParameter, typu
object
, což je parametr, který je předán PointerEnteredCommand. - PointerExitedCommand, typu ICommand, což je příkaz, který se má vyvolat, když ukazatel, který je v ohraničující oblasti zobrazení, opustí tuto ohraničující oblast.
- PointerExitedCommandParameter, typu
object
, což je parametr, který je předán PointerExitedCommand. - PointerMovedCommand, typu ICommand, což je příkaz, který se má vyvolat, když se ukazatel přesune a zůstane v ohraničující oblasti zobrazení.
- PointerMovedCommandParameter, typu
object
, což je parametr, který je předán PointerMovedCommand. - PointerPressedCommand, typu ICommand, což je příkaz, který se má vyvolat, když ukazatel inicializuje stisknutí v zobrazení.
- PointerPressedCommandParameter, typu
object
, což je parametr, který je předán do PointerPressedCommand. - PointerReleasedCommand, typu ICommand, což je příkaz, který má vyvolat, když ukazatel, který dříve inicioval stisknutí, je uvolněn, zatímco v zobrazení.
- PointerReleasedCommandParameter, typu
object
, což je parametr, který je předán do PointerReleasedCommand.
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.