Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Scopri come usare il feedback aptico dai dispositivi penna per fornire interazioni più naturali e tattili nella tua app SDK per app di Windows.
Windows 11 ha introdotto il feedback aptico per le penne digitali, consentendo agli utenti di sentire la penna mentre interagisce con l'interfaccia utente dell'app. Quando si fa riferimento a questa funzionalità, l'aptico viene usato nelle API e nella documentazione per sviluppatori, mentre tactile è il nome rivolto all'utente visualizzato in impostazioni di Windows.
API chiave
- PenDevice
- SimpleHapticsController
- KnownSimpleHapticsControllerWaveforms
- PenDeviceInterop (SDK per app di Windows)
Tipi di feedback aptico
Sono disponibili due tipi di feedback aptico:
- Feedback di scrittura — Simula la sensazione degli strumenti di scrittura o disegno (penna, pennarello, matita, evidenziatore) tramite vibrazioni continue mentre la penna è a contatto con lo schermo.
- Feedback di interazione : segnali tattili brevi per le azioni dell'utente, ad esempio il passaggio del mouse su un pulsante, il clic o la conferma di un'azione completata.
Rilevare l'input della penna
Eseguire la registrazione per l'evento PointerEntered e verificare se il tipo di dispositivo puntatore è una penna:
private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
{
return;
}
// Pen detected — check for haptic support.
}
Ottenere il dispositivo Penna nel SDK per app di Windows
In un'app SDK per app di Windows usare PenDeviceInterop , una classe di interoperabilità SDK per app di Windows, per ottenere l'oggetto WinRT PenDevice da un punto di puntatore.
PenDevice, SimpleHapticsController e KnownSimpleHapticsControllerWaveforms sono tipi WinRT dei namespace Windows.Devices.Input e Windows.Devices.Haptics; solo la chiamata di interoperabilità in sé proviene dallo spazio dei nomi Microsoft.UI.Input.Interop di SDK per app di 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).
}
Annotazioni
Nelle app UWP, usa PenDevice.GetFromPointerId invece. La PenDeviceInterop classe è specifica del SDK per app di Windows.
Forme d'onda di inchiostrazione
Le forme d'onda dell'input penna vengono riprodotte continuamente mentre la penna è a contatto con lo schermo. Le forme d'onda obbligatorie sono sicuramente supportate da qualsiasi penna aptica.
| Forma d' onda | Description | Obbligatorio |
|---|---|---|
| InkContinuous | Sensazione predefinita della penna a sfera. Alternativa per forme d'onda non supportate. | Yes |
| PennelloContinuo | Pennello | No |
| MatitaContinua | Strumento matita | No |
| MarkerContinuo | Strumento evidenziatore | No |
| ChiselMarkerContinuous | Marcatore/evidenziatore di chisele | No |
| EraserContinuous | Strumento gomma | No |
| GalaxyPenContinuous | Inchiostro speciale (pennello multicolore) | No |
Forme d'onda di interazione
Le forme d'onda di interazione forniscono un feedback breve e diretto per le azioni dell'interfaccia utente.
| Forma d' onda | Description | Obbligatorio |
|---|---|---|
| Click | Clic breve predefinito. Alternativa per le interazioni non supportate. | Yes |
| Error | Azione non riuscita o errore | No |
| Hover | Inizio del passaggio del puntatore su un elemento interattivo | No |
| Passeggiata | Premuto un elemento interattivo | No |
| Release | Rilasciato un elemento interattivo | No |
| Success | Azione riuscita | No |
| BuzzContinuous | Continuo ronzio | No |
| RumbleContinuous | Vibrazione continua | No |
Inviare feedback aptico
Scorrere SupportedFeedback per trovare la forma d'onda desiderata, quindi chiamare 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);
}
Interrompere il feedback aptico
Arrestare sempre il feedback aptico quando il puntatore esce dall'elemento. Eseguire la registrazione per PointerExited nello stesso elemento:
private void Canvas_PointerExited(object sender, PointerRoutedEventArgs e)
{
hapticsController?.StopFeedback();
}
Annotazioni
Alcune penne interrompono automaticamente il feedback aptico quando la penna si allontana dallo schermo. Tuttavia, non tutte le penne lo fanno, quindi sempre chiamare StopFeedback in modo esplicito.
Personalizzare il feedback aptico
Alcune penne supportano personalizzazioni aggiuntive. Controllare il supporto prima di usarli:
| Property | Controllare il supporto con |
|---|---|
| Intensità | IsIntensitySupported |
| Numero di riproduzioni | IsPlayCountSupported |
| Durata del gioco | IsPlayDurationSupported |
| Intervallo di sospensione della riproduzione | IsReplayPauseIntervalSupported |
if (hapticsController.IsIntensitySupported)
{
hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}