Распознавание жеста указателя
Распознаватель жестов указателя .NET Multi-platform app (.NET MAUI) определяет, когда указатель входит, завершает работу и перемещается в представление и реализуется с PointerGestureRecognizer помощью класса. Этот класс определяет приведенные ниже свойства.
- PointerEnteredCommandICommandТип , который является командой для вызова, когда указатель вводит ограничивающую область представления.
- PointerEnteredCommandParameter, тип
object
, который является параметром, передаваемым в PointerEnteredCommand. - PointerExitedCommandICommandТип , который является командой, которая вызывается, когда указатель, который находится в ограничивающей области представления, оставляет эту ограничивающую область.
- PointerExitedCommandParameter, тип
object
, который является параметром, передаваемым в PointerExitedCommand. - PointerMovedCommandICommandтип , который является командой для вызова при перемещении указателя, оставаясь в ограничивающей области представления.
- PointerMovedCommandParameter, тип
object
, который является параметром, передаваемым в PointerMovedCommand. - PointerPressedCommandICommandТип , который является командой для вызова, когда указатель инициирует нажатие в представлении.
- PointerPressedCommandParameter с типом
object
, который передается как параметр в PointerPressedCommand. - PointerReleasedCommandICommandтип , который является командой для вызова, когда указатель, который ранее инициировал прессу, в то время как в представлении.
- PointerReleasedCommandParameter с типом
object
, который передается как параметр в PointerReleasedCommand.
Эти свойства поддерживаются объектами BindableProperty, то есть эти свойства можно указывать в качестве целевых для привязки и стилизации данных.
Класс PointerGestureRecognizer также определяет следующие события:
- PointerEntered, возникающее при вводе указателя ограничивающей области представления.
- PointerExited, возникает, когда указатель, который находится в ограничивающей области представления, оставляет эту ограничивающую область.
- PointerMoved, который возникает при перемещении указателя, оставаясь в ограничивающей области представления.
- PointerPressed, возникает, когда указатель инициирует нажатие в представлении.
- PointerReleased, что вызывается, когда указатель, который ранее инициировал прессу, освобождается, в то время как в представлении.
PointerEventArgs Объект сопровождает события и определяет PlatformArgs свойство типаPlatformPointerEventArgs, которое предоставляет доступ к аргументам конкретной платформы для события.
В Android PlatformPointerEventArgs класс определяет следующие свойства:
Sender
ViewТип , представляет собственное представление, присоединенное к событию.MotionEvent
MotionEventТип , указывает собственное событие или обработчик, подключенный к представлению.
Кроме того, PointerEventArgs объект определяет GetPosition метод, возвращающий объект, Point?
представляющий позицию указателя при обнаружении жеста. Дополнительные сведения о методе см. в разделе "Получение позиции жестаGetPosition".
Внимание
Распознавание жестов указателя поддерживается в Android, iPadOS, Mac Catalyst и Windows.
.NET MAUI также определяет визуальное PointerOver
состояние. Это состояние может изменить внешний вид представления при наведении курсора мыши на него, но не нажимается. Дополнительные сведения см. в разделе "Визуальные состояния".
Создание pointerGestureRecognizer
Чтобы сделать View жесты указателя распознавания, создайте PointerGestureRecognizer объект, обработайте необходимые события и добавьте распознаватель жестов в GestureRecognizers коллекцию в представлении. Кроме того, создайте PointerGestureRecognizer объект и привязите необходимые команды к ICommand реализации и добавьте распознаватель жестов в GestureRecognizers коллекцию в представлении.
В следующем примере кода показан присоединенный PointerGestureRecognizer к объекту Image. События PointerGestureRecognizer используются для реагирования на обнаружение жестов указателя:
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<PointerGestureRecognizer PointerEntered="OnPointerEntered"
PointerExited="OnPointerExited"
PointerMoved="OnPointerMoved" />
</Image.GestureRecognizers>
</Image>
Код обработчиков событий должен быть добавлен в файл программной части:
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
}
Эквивалентный код на C# выглядит так:
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);
Получение позиции жеста
Позиция, с которой произошел жест указателя, можно получить путем вызова GetPosition метода в объекте PointerEventArgs . Метод GetPosition принимает Element?
аргумент и возвращает позицию в качестве Point?
объекта:
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);
}
Аргумент Element?
определяет элемент, к который должна быть получена позиция относительно. null
Указание значения в качестве этого аргумента означает, что GetPosition метод возвращает Point?
объект, определяющий положение жеста указателя в окне.