Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Obtenga información sobre cómo usar comentarios hápticos de dispositivos de lápiz para proporcionar interacciones más naturales y táctiles en la aplicación de SDK de Aplicaciones para Windows.
Windows 11 introdujo comentarios hápticos para lápices digitales, lo que permite a los usuarios sentir su lápiz interactuando con la interfaz de usuario de la aplicación. Al referirse a esta función, háptico se usa en las API para desarrolladores y en la documentación, mientras que táctil es el nombre visible para el usuario que se muestra en Configuración de Windows.
APIs clave
- PenDevice
- SimpleHapticsController
- KnownSimpleHapticsControllerWaveforms
- PenDeviceInterop (SDK de Aplicaciones para Windows)
Tipos de comentarios hápticos
Hay dos tipos de comentarios hápticos disponibles:
- Retroalimentación de trazo — Simula la sensación de las herramientas de escritura o dibujo (bolígrafo, rotulador, lápiz, subrayador) mediante vibraciones continuas mientras el lápiz toca la pantalla.
- Comentarios de interacción : señales táctiles cortas para acciones del usuario, como mantener el puntero sobre un botón, hacer clic o confirmar una acción completada.
Detección de la entrada del lápiz
Regístrese para el PointerEntered evento y compruebe si el tipo de dispositivo de puntero es un lápiz:
private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
{
return;
}
// Pen detected — check for haptic support.
}
Obtener el PenDevice en el SDK de Aplicaciones para Windows
En una aplicación del SDK de aplicaciones de Windows, use PenDeviceInterop —una clase de interoperabilidad del SDK de aplicaciones de Windows— para obtener el objeto WinRT PenDevice a partir de un punto del puntero.
PenDevice, SimpleHapticsController y KnownSimpleHapticsControllerWaveforms son tipos WinRT de los espacios de nombres Windows.Devices.Input y Windows.Devices.Haptics; solo la propia llamada de interop procede del espacio de nombres Microsoft.UI.Input.Interop del SDK de aplicaciones de 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).
}
Nota:
En las aplicaciones para UWP, use PenDevice.GetFromPointerId en su lugar. La PenDeviceInterop clase es específica de la SDK de Aplicaciones para Windows.
Formas de onda de trazo
Las formas de onda de trazo se reproducen de forma continua mientras el lápiz está en contacto con la pantalla. Se garantiza que las formas de onda necesarias sean compatibles con cualquier lápiz háptico.
| Forma de onda | Description | Obligatorio |
|---|---|---|
| InkContinuous | Sensación predeterminada de bolígrafo. Alternativa para formas de onda no compatibles. | Sí |
| BrushContinuous | Herramientas Pincel | No |
| PencilContinuous | Herramienta Lápiz | No |
| MarkerContinuous | Herramienta rotulador | No |
| ChiselMarkerContinuous | Rotulador de punta ancha / subrayador | No |
| EraserContinuous | Herramienta borrador | No |
| GalaxyPenContinuous | Tinta especial (pincel multicolor) | No |
Formas de onda de interacción
Las formas de onda de interacción proporcionan comentarios cortos y directos para las acciones de la interfaz de usuario.
| Forma de onda | Description | Obligatorio |
|---|---|---|
| Click | Clic corto predeterminado. Solución alternativa para interacciones no compatibles. | Sí |
| Error | La acción falló o se produjo un error | No |
| Mantener el puntero | Se ha comenzado a pasar el cursor por encima de un elemento interactivo | No |
| Presione | Se pulsó un elemento interactivo | No |
| Release | Publicado un elemento interactivo | No |
| Success | Acción completada correctamente | No |
| BuzzContinuous | Zumbido continuo | No |
| RumbleContinuous | Vibración continua | No |
Enviar comentarios hápticos
Recorra SupportedFeedback para encontrar la forma de onda deseada y, a continuación, llame a 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);
}
Desactivar respuesta háptica
Detenga siempre los comentarios hápticos cuando el puntero salga del elemento. Registro de PointerExited en el mismo elemento:
private void Canvas_PointerExited(object sender, PointerRoutedEventArgs e)
{
hapticsController?.StopFeedback();
}
Nota:
Algunos lápices detienen automáticamente la respuesta háptica cuando el lápiz se aleja de la pantalla. Sin embargo, no todos los lápices lo hacen, por lo que siempre llaman StopFeedback explícitamente.
Personalización de comentarios hápticos
Algunos lápices admiten personalizaciones adicionales. Compruebe el soporte técnico antes de usarlos:
| Propiedad | Comprueba el soporte con |
|---|---|
| Intensidad | IsIntensitySupported |
| Número de reproducciones | IsPlayCountSupported |
| Duración de la reproducción | IsPlayDurationSupported |
| Intervalo de pausa de reproducción | IsReplayPauseIntervalSupported |
if (hapticsController.IsIntensitySupported)
{
hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}