Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dowiedz się, jak używać haptycznych informacji zwrotnych z urządzeń długopisowych, aby zapewnić bardziej naturalne i dotykowe interakcje w aplikacji Zestaw SDK do aplikacji systemu Windows.
System Windows 11 wprowadził sprzężenie haptyczne dla piór cyfrowych, umożliwiając użytkownikom odczuwanie interakcji pióra z interfejsem aplikacji. W odniesieniu do tej funkcji termin haptyczny jest używany w interfejsach API i dokumentacji dla deweloperów, natomiast dotyk to nazwa widoczna dla użytkownika, wyświetlana w Ustawieniach systemu Windows.
Kluczowe interfejsy API
- PenDevice
- SimpleHapticsController
- KnownSimpleHapticsControllerWaveforms
- PenDeviceInterop (Zestaw SDK do aplikacji systemu Windows)
Typy opinii haptycznych
Dostępne są dwa typy opinii haptycznych:
- Sprzężenie zwrotne pisania odręcznego — Symuluje odczucia towarzyszące pisaniu lub rysowaniu za pomocą narzędzi (pióra, markera, ołówka, zakreślacza) dzięki ciągłym wibracjom, gdy pióro dotyka ekranu.
- Opinie dotyczące interakcji — krótkie sygnały dotykowe dla akcji użytkownika, takich jak umieszczenie wskaźnika myszy na przycisku, kliknięcie lub potwierdzenie ukończonej akcji.
Wykrywanie wejścia pióra
Zarejestruj procedurę obsługi zdarzenia PointerEntered i sprawdź, czy typ urządzenia wskazującego to pióro:
private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
{
return;
}
// Pen detected — check for haptic support.
}
Pobieranie urządzenia PenDevice w Zestaw SDK do aplikacji systemu Windows
W aplikacji Zestaw SDK do aplikacji systemu Windows użyj klasy PenDeviceInterop — klasy interoperacyjnej zestawu Zestaw SDK do aplikacji systemu Windows — aby uzyskać obiekt WinRT PenDevice z punktu wskazywanego przez wskaźnik.
PenDevice, SimpleHapticsController i KnownSimpleHapticsControllerWaveforms są typami WinRT z przestrzeni nazw Windows.Devices.Input i Windows.Devices.Haptics; tylko samo wywołanie interoperacyjne pochodzi z przestrzeni nazw Microsoft.UI.Input.Interop zestawu Zestaw SDK do aplikacji systemu Windows:
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).
}
Uwaga / Notatka
W aplikacjach platformy UWP użyj PenDevice.GetFromPointerId zamiast tego. Ta PenDeviceInterop klasa jest specyficzna dla zestawu Zestaw SDK do aplikacji systemu Windows.
Kształty fal odręczne
Odręczne kształty falowe są odtwarzane w sposób ciągły, gdy pióro kontaktuje się z ekranem. Wymagane kształty fali są gwarantowane przez wszelkie pióro dotykowe.
| Przebieg | Description | Wymagane |
|---|---|---|
| InkContinuous | Domyślne wrażenie długopisu. Rezerwowy dla nieobsługiwanych kształtów fal. | Yes |
| Szczotka Ciągła | Narzędzie pędzla | No |
| Ołówekkontynualne | Narzędzie ołówka | No |
| ZnacznikCiągły | Narzędzie znacznikowe | No |
| MarkerOstrzowyCiągły | Znacznik/wyróżniacz | No |
| GumkaCiągła | Narzędzie wymazywania | No |
| GalaxyPenContinuous | Specjalny atrament (wielokolorowy pędzel) | No |
Kształty fal interakcji
Przebiegi falowe interakcji zapewniają krótkie, bezpośrednie informacje zwrotne dotyczące działań w interfejsie użytkownika.
| Przebieg | Description | Wymagane |
|---|---|---|
| Kliknij | Domyślne krótkie kliknięcie. Alternatywa awaryjna dla nieobsługiwanych interakcji. | Yes |
| Error | Akcja nie powiodła się lub wystąpił błąd | No |
| Hover | Rozpoczęto najeżdżanie kursorem na element interaktywny | No |
| Prasa | Naciśnięcie elementu interaktywnego | No |
| Uwolnij | Wydanie elementu interaktywnego | No |
| Success | Akcja powiodła się | No |
| BuzzContinuous | Ciągłe brzęczenie | No |
| RumbleContinuous | Ciągły pomruk | No |
Wysyłanie opinii haptycznej
Przejdź przez SupportedFeedback, aby znaleźć żądany przebieg, a następnie wywołaj 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);
}
Wyłącz sprzężenie haptyczne
Zawsze wyłączaj sprzężenie haptyczne, gdy wskaźnik opuści element. Zarejestruj PointerExited w tym samym elemencie:
private void Canvas_PointerExited(object sender, PointerRoutedEventArgs e)
{
hapticsController?.StopFeedback();
}
Uwaga / Notatka
Niektóre pióra automatycznie wyłączają wibracje haptyczne, gdy pióro odsuwa się od ekranu. Jednak nie wszystkie długopisy to robią, więc zawsze należy jawnie wywołać StopFeedback .
Dostosuj informację zwrotną haptyczną
Niektóre pióra oferują dodatkowe opcje dostosowania. Przed rozpoczęciem korzystania z nich sprawdź pomoc techniczną:
| Property | Sprawdź pomoc techniczną |
|---|---|
| Intensywność | IsIntensitySupported |
| Liczba odtwarzania | IsPlayCountSupported |
| Czas trwania odtwarzania | IsPlayDurationSupported |
| Interwał pauzy odtwarzania | IsReplayPauseIntervalSupported |
if (hapticsController.IsIntensitySupported)
{
hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}