Haptická (hmatová) odezva pera

Naučte se používat haptickou zpětnou vazbu u digitálních per k vytvoření přirozenějších a taktilnějších interakcí ve své aplikaci Windows App SDK.

Windows 11 zavedli haptickou zpětnou vazbu pro digitální pera, aby uživatelé cítili, že jejich pero komunikuje s uživatelským rozhraním aplikace. Při odkazování na tuto funkci se v rozhraních API pro vývojáře a v dokumentaci používá označení haptický, zatímco taktilní je název určený pro uživatele, který se zobrazuje v Nastavení Windows.

Klíčová rozhraní API

Typy haptické zpětné vazby

K dispozici jsou dva typy haptické zpětné vazby:

  • Rukopisná zpětná vazba – Simuluje pocit psaní nebo kreslicích nástrojů (pero, značka, tužka, zvýrazňovač) průběžnými kmitáními, zatímco se pero dotkne obrazovky.
  • Zpětná vazba při interakci — Krátké hmatové signály při akcích uživatele, jako je najetí myší na tlačítko, kliknutí nebo potvrzení dokončení akce.

Detekce vstupu pera

Zaregistrujte událost PointerEntered a zkontrolujte, jestli je typ zařízení ukazatele perem:

private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
    {
        return;
    }

    // Pen detected — check for haptic support.
}

Získání PenDevice v Windows App SDK

V aplikaci Windows App SDK použijte PenDeviceInterop — třídu interoperability Windows App SDK — k získání objektu WinRT PenDevice z bodu ukázání. PenDevice, SimpleHapticsController a KnownSimpleHapticsControllerWaveforms jsou typy WinRT z oborů názvů Windows.Devices.Input a Windows.Devices.Haptics; pouze samotné volání interoperability pochází z oboru názvů Microsoft.UI.Input.Interop sady Windows App SDK:

using Microsoft.UI.Input.Interop;
using Windows.Devices.Haptics;
using Windows.Devices.Input;
using Windows.Foundation.Metadata;

private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
    {
        return;
    }

    var penDevice = PenDeviceInterop.FromPointerPoint(e.GetCurrentPoint(null));

    if (penDevice == null)
    {
        return; // Pen does not support advanced features.
    }

    // SimpleHapticsController requires Windows 11. Check for API presence
    // before accessing it so the app doesn't throw on Windows 10.
    if (!ApiInformation.IsPropertyPresent(
        "Windows.Devices.Input.PenDevice", "SimpleHapticsController"))
    {
        return; // Haptic feedback requires Windows 11.
    }

    var hapticsController = penDevice.SimpleHapticsController;
    if (hapticsController == null)
    {
        return; // Pen does not support haptic feedback.
    }

    // Configure haptic feedback (see examples below).
}

Poznámka:

V aplikacích pro UPW použijte PenDevice.GetFromPointerId místo toho. Třída PenDeviceInterop je specifická pro Windows App SDK.

Inkovací vlnové tvary

Vlnové průběhy rukopisu probíhají nepřetržitě, když je pero v kontaktu s obrazovkou. Podpora požadovaných vlnových tvarů je zaručena u každého haptického pera.

Tvar vlny Description Povinné
InkNepřetržitě Výchozí pocit z kuličkového pera. Náhradní pro nepodporované vlnové tvary. Ano
BrushContinuous Nástroj štětec Ne
PencilContinuous Nástroj tužka Ne
Nepřetržitý značkovač Nástroj značky Ne
ChiselMarkerContinuous Značka chiselu / zvýrazňovač Ne
Guma nepřetržitá Nástroj Guma Ne
GalaxyPenContinuous Speciální inkoust (vícebarevný štětec) Ne

Vlnové tvary interakce

Vlnové křivky interakce poskytují krátkou přímou zpětnou vazbu pro akce uživatelského rozhraní.

Tvar vlny Description Povinné
Klikněte Výchozí krátké kliknutí Náhradní řešení pro nepodporované interakce Ano
Error Akce selhala nebo došlo k chybě Ne
Vznášet Začínáme najetím myší na interaktivní prvek Ne
Stiskněte Stisknutí interaktivního prvku Ne
Release Byl vydán interaktivní prvek Ne
Success Akce byla úspěšná. Ne
BuzzContinuous Nepřetržité bzučení Ne
RumbleContinuous Nepřetržité dunění Ne

Odeslání haptické zpětné vazby

Projděte SupportedFeedback, vyhledejte požadovaný vlnový tvar a poté zavolejte SendHapticFeedback:

SimpleHapticsControllerFeedback currentWaveform = null;

// Try to use BrushContinuous, fall back to InkContinuous.
foreach (var waveform in hapticsController.SupportedFeedback)
{
    if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.BrushContinuous)
    {
        currentWaveform = waveform;
        break;
    }
}

if (currentWaveform == null)
{
    foreach (var waveform in hapticsController.SupportedFeedback)
    {
        if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.InkContinuous)
        {
            currentWaveform = waveform;
            break;
        }
    }
}

if (currentWaveform != null)
{
    hapticsController.SendHapticFeedback(currentWaveform);
}

Zastavení haptické zpětné vazby

Vždy zastavte haptickou zpětnou vazbu, když ukazatel opustí prvek. Zaregistrujte pro PointerExited na stejném prvku:

private void Canvas_PointerExited(object sender, PointerRoutedEventArgs e)
{
    hapticsController?.StopFeedback();
}

Poznámka:

Některá pera automaticky zastaví haptickou odezvu, když se pero přestane dotýkat obrazovky. Ale ne všechna pera to dělají, takže vždy volejte StopFeedback explicitně.

Přizpůsobení haptické zpětné vazby

Některá pera podporují další přizpůsobení. Než ji začnete používat, zkontrolujte podporu:

Vlastnictví Zkontrolujte podporu pomocí
Intenzita IsIntensitySupported
Počet přehrávání IsPlayCountSupported
Doba přehrávání IsPlayDurationSupported
Interval pauzy opakování IsReplayPauseIntervalSupported
if (hapticsController.IsIntensitySupported)
{
    hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}