Toll haptikus (tapintási) visszajelzés

Megtudhatja, hogyan használhatja a tolleszközökről érkező haptikus visszajelzéseket, hogy természetesebb és tapinthatóbb interakciókat biztosítson a Windows App SDK alkalmazásban.

Windows 11 bevezettük a digitális tollakra vonatkozó haptikus visszajelzéseket, így a felhasználók érezhetik, hogy a tolluk interakcióba lép az alkalmazás felhasználói felületével. Amikor erre a funkcióra hivatkozunk, a haptic kifejezést használják a fejlesztői API-kban és a dokumentációban, míg a taktilis a felhasználók számára megjelenített elnevezés a Windows Beállításokban.

Fő API-k

Az érintéses visszajelzés típusai

Kétféle haptikus visszajelzés érhető el:

  • Szabadkézi visszajelzés – Az írási vagy rajzeszközök (toll, jelölő, ceruza, kiemelő) hangulatát szimulálja folyamatos rezgésekkel, miközben a toll megérinti a képernyőt.
  • Interakciós visszajelzés – Rövid tapintható jelek felhasználói műveletekhez, például rámutatás egy gombra, kattintás vagy egy befejezett művelet megerősítése.

Stylusbemenet észlelése

Regisztráljon az PointerEntered eseményre, és ellenőrizze, hogy a mutatóeszköz típusa toll-e:

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

    // Pen detected — check for haptic support.
}

A PenDevice beszerzése a Windows App SDK-ban

Egy Windows App SDK alkalmazásban használjon PenDeviceInterop egy Windows App SDK interop osztályt a WinRT-objektum PenDevice mutatópontról való lekéréséhez. PenDevice, SimpleHapticsControllerés KnownSimpleHapticsControllerWaveforms WinRT-típusok a Windows.Devices.Input névterekbőlWindows.Devices.Haptics; csak az interop hívás maga a Windows App SDK névteréből Microsoft.UI.Input.Interop származik:

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).
}

Megjegyzés:

Az UWP-alkalmazásokban használja PenDevice.GetFromPointerId helyette. Az PenDeviceInterop osztály a Windows App SDK jellemző.

Tintázási hullámformák

A kézírási hullámformák folyamatosan láthatók, amíg a toll érintkezik a képernyővel. A szükséges hullámformákat minden haptikus toll támogatja.

Hullámforma Description Kötelező
InkContinuous Alapértelmezett golyóstollérzet. Tartalék megoldás nem támogatott hullámformákhoz. Igen
BrushContinuous Kefe eszköz No
PencilContinuous Ceruza eszköz No
FolyamatosJelző Jelölőeszköz No
ChiselMarkerContinuous Vésőjelölő / kiemelő No
EraserContinuous Radír eszköz No
GalaxyPenContinuous Speciális tinta (többszínű ecset) No

Interakciós hullámformák

Az interakciós hullámformák rövid, közvetlen visszajelzést nyújtanak a felhasználói felületi műveletekről.

Hullámforma Description Kötelező
Kattints Alapértelmezett rövid kattintás. Tartalék a nem támogatott interakciókhoz. Igen
Error A művelet meghiúsult vagy hiba történt No
Rámutat A kurzort egy interaktív elem fölé vitte No
Sajtó Interaktív elem lenyomása No
Release Interaktív elem kiadása No
Success A művelet sikeres volt No
BuzzContinuous Folyamatos zümmögés No
RumbleContinuous Folyamatos dübörgés No

Tapintásos visszajelzés küldése

SupportedFeedback végigiterálásával keresse meg a kívánt hullámformát, majd hívja meg a(z) SendHapticFeedback függvényt:

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

Haptikus visszajelzés leállítása

Mindig állítsa le a haptikus visszajelzést, amikor a mutató kilép az elemből. Regisztráljon PointerExited ugyanarra az elemre:

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

Megjegyzés:

Egyes tollak automatikusan leállítják a haptikus visszajelzést, amikor elhagyják a képernyőt. Azonban nem minden toll teszi ezt, ezért mindig hívja StopFeedback explicit módon.

Haptic-visszajelzés testreszabása

Egyes tollak további testreszabási lehetőségeket is kínálnak. Használat előtt ellenőrizze a támogatási szolgálatot:

Property Támogatás ellenőrzése ezzel
Intenzitás IsIntensitySupported
Lejátszások száma IsPlayCountSupported
Lejátszási időtartam IsPlayDurationSupported
Visszajátszási szünet időköze IsReplayPauseIntervalSupported
if (hapticsController.IsIntensitySupported)
{
    hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}