Поделиться через


Распознавание жеста указателя

Распознаватель жестов указателя .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 класс определяет следующие свойства:

  • SenderViewТип , представляет собственное представление, присоединенное к событию.
  • MotionEventMotionEventТип , указывает собственное событие или обработчик, подключенный к представлению.

Кроме того, 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? объект, определяющий положение жеста указателя в окне.