Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Saiba como usar comentários hápticos de dispositivos de caneta para fornecer interações mais naturais e táteis em seu aplicativo SDK do Aplicativo Windows.
Windows 11 introduziu comentários hápticos para canetas digitais, permitindo que os usuários sintam a caneta interagindo com a interface do usuário do aplicativo. Ao se referir a esse recurso, haptic é usado em APIs e na documentação para desenvolvedores, enquanto Tátil é o nome voltado ao usuário exibido nas Configurações do Windows.
APIs de chave
- PenDevice
- SimpleHapticsController
- KnownSimpleHapticsControllerWaveforms
- PenDeviceInterop (SDK do Aplicativo Windows)
Tipos de retorno háptico
Dois tipos de comentários hápticos estão disponíveis:
- Resposta tátil da tinta digital — Simula a sensação de ferramentas de escrita ou desenho (caneta, marcador, lápis, marca-texto) por meio de vibrações contínuas enquanto a caneta está em contato com a tela.
- Comentários de interação — sinais táteis curtos para ações do usuário, como passar o mouse sobre um botão, clicar ou confirmar uma ação concluída.
Detectar entrada de caneta
Registre-se para o PointerEntered evento e verifique se o tipo de dispositivo de ponteiro é uma caneta:
private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
{
return;
}
// Pen detected — check for haptic support.
}
Obter o PenDevice no SDK do Aplicativo Windows
Em um aplicativo do SDK do Aplicativo Windows, use PenDeviceInterop — uma classe de interoperabilidade do SDK do Aplicativo Windows — para obter o objeto WinRT PenDevice a partir de um ponto de ponteiro.
PenDevice, SimpleHapticsController e KnownSimpleHapticsControllerWaveforms são tipos WinRT dos namespaces Windows.Devices.Input e Windows.Devices.Haptics; somente a própria chamada de interoperabilidade vem do namespace Microsoft.UI.Input.Interop do SDK do Aplicativo 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).
}
Observação
Em aplicativos UWP, use PenDevice.GetFromPointerId em vez disso. A PenDeviceInterop classe é específica para o SDK do Aplicativo Windows.
Formas de onda de escrita à tinta
As formas de onda de tinta são exibidas continuamente enquanto a caneta estiver em contato com a tela. As formas de onda necessárias têm suporte garantido em qualquer caneta háptica.
| Forma de onda | Description | Obrigatório |
|---|---|---|
| InkContinuous | Sensação padrão de caneta esferográfica. Alternativa para formas de onda não compatíveis. | Yes |
| BrushContinuous | Ferramenta de pincel | No |
| PencilContinuous | Ferramenta de lápis | No |
| MarkerContinuous | Ferramenta de marcação | No |
| ChiselMarkerContinuous | Marcador chanfrado/marca-texto | No |
| EraserContinuous | Ferramenta Borracha | No |
| GalaxyPenContinuous | Tinta especial (pincel multicolorido) | No |
Formas de onda de interação
As animações onduladas de interação fornecem feedback curto e direto para ações na interface do usuário.
| Forma de onda | Description | Obrigatório |
|---|---|---|
| Click | Clique curto padrão. Alternativa para interações sem suporte. | Yes |
| Erro | Falha na ação ou erro ocorreu | No |
| Focalizar | Começou a passar o mouse sobre um elemento interativo | No |
| Imprensa | Pressionou um elemento interativo | No |
| Liberação | Lançou um elemento interativo | No |
| Êxito | Ação bem-sucedida | No |
| BuzzContinuous | Zumbido contínuo | No |
| RumbleContinuous | Ruído contínuo | No |
Enviar comentários hápticos
Percorra SupportedFeedback para encontrar a forma de onda desejada e, em seguida, chame 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);
}
Parar comentários hápticos
Sempre interrompa o feedback háptico quando o ponteiro deixar o elemento. Registro de PointerExited no mesmo elemento:
private void Canvas_PointerExited(object sender, PointerRoutedEventArgs e)
{
hapticsController?.StopFeedback();
}
Observação
Algumas canetas param os hápticos automaticamente quando a caneta sai da tela. No entanto, nem todas as canetas fazem isso, então sempre chame StopFeedback explicitamente.
Personalizar comentários hápticos
Algumas canetas dão suporte a personalizações adicionais. Verifique o suporte antes de usá-los:
| Propriedade | Verifique a compatibilidade com |
|---|---|
| Intensidade | IsIntensitySupported |
| Contagem de reproduções | IsPlayCountSupported |
| Duração da reprodução | IsPlayDurationSupported |
| Intervalo de pausa da repetição | IsReplayPauseIntervalSupported |
if (hapticsController.IsIntensitySupported)
{
hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}
Artigos relacionados
Windows developer