Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aprenda a usar feedback háptico de dispositivos com caneta para proporcionar interações mais naturais e táteis na sua aplicação SDK de Aplicações Windows.
O Windows 11 introduziu feedback háptico para canetas digitais, permitindo aos utilizadores sentir a sua caneta a interagir com a interface da aplicação. Ao fazer referência a esta funcionalidade, haptic é utilizado nas APIs e na documentação para programadores, enquanto tactile é a designação apresentada ao utilizador nas Definições do Windows.
APIs principais
- PenDevice
- SimpleHapticsController
- Formas de onda conhecidas do controlador de háptica simples
- PenDeviceInterop (SDK de Aplicações Windows)
Tipos de feedback háptico
Existem dois tipos de feedback háptico disponíveis:
- Resposta tátil da tinta digital — Simula a sensação de instrumentos de escrita ou desenho (caneta, marcador, lápis, marca-texto) por meio de vibrações contínuas enquanto a caneta toca no ecrã.
- Feedback de interação — Sinais táteis curtos para ações do utilizador, como passar o rato sobre um botão, clicar ou confirmar uma ação concluída.
Detetar entrada da caneta stylus
Registe-se para o PointerEntered evento e verifique se o tipo de dispositivo 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.
}
Obtenha o PenDevice no SDK de Aplicações Windows
Numa aplicação do SDK de Aplicações Windows, use PenDeviceInterop — uma classe de interoperabilidade do SDK de Aplicações Windows — para obter o objeto WinRT PenDevice a partir de um ponto indicado pelo ponteiro.
PenDevice, SimpleHapticsController e KnownSimpleHapticsControllerWaveforms são tipos WinRT dos espaços de nomes Windows.Devices.Input e Windows.Devices.Haptics; apenas a própria chamada de interoperabilidade provém do espaço de nomes Microsoft.UI.Input.Interop do SDK de Aplicações 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
Nas aplicações UWP, use PenDevice.GetFromPointerId em vez disso. A PenDeviceInterop classe é específica do SDK de Aplicações Windows.
Formas de onda de entintamento
As formas de onda dos traços manuscritos são reproduzidas continuamente enquanto a caneta estiver em contacto com o ecrã. É garantido que qualquer caneta háptica suporta as formas de onda necessárias.
| Forma de onda | Description | Obrigatório |
|---|---|---|
| InkContinuous | Sensação padrão de caneta esferográfica. Alternativa para formas de onda não suportadas. | Yes |
| BrushContinuous | Ferramenta Pincel | No |
| LápisContínuo | Ferramenta lápis | No |
| MarcadorContínuo | Ferramenta de marcadores | No |
| Cinzel Marcador Contínuo | Marcador com ponta em cinzel / marcador de texto | No |
| Apagador Contínuo | Ferramenta Borracha | No |
| GalaxyPenContinuous | Tinta especial (pincel multicolorido) | No |
Formas de onda de interação
As formas de onda de interação fornecem feedback curto e direto para as ações da interface.
| Forma de onda | Description | Obrigatório |
|---|---|---|
| Clique em | Clique curto por defeito. Alternativa para interações não suportadas. | Yes |
| Erro | A ação falhou ou ocorreu erro | No |
| Passe o cursor | Começou a pairar sobre um elemento interativo | No |
| Pressionar | Pressionou um elemento interativo | No |
| Release | Lançado um elemento interativo | No |
| Success | Ação bem-sucedida | No |
| BuzzContinuous | Zumbido contínuo | No |
| RumbleContinuous | Ronco contínuo | No |
Enviar resposta háptica
Percorra SupportedFeedback para encontrar a forma de onda pretendida 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);
}
Pare o feedback háptico
Pare sempre o feedback háptico quando o ponteiro sair do elemento. Registe PointerExited no mesmo elemento:
private void Canvas_PointerExited(object sender, PointerRoutedEventArgs e)
{
hapticsController?.StopFeedback();
}
Observação
Algumas canetas param a háptica automaticamente quando a caneta sai do ecrã. No entanto, nem todas as canetas fazem isto, por isso, chama sempre StopFeedback explicitamente.
Personalizar resposta háptica
Algumas canetas suportam personalizações adicionais. Verifique o suporte antes de os usar:
| Property | Verifique o suporte com |
|---|---|
| Intensidade | IsIntensitySupported |
| Contagem de jogadas | IsPlayCountSupported |
| Duração do jogo | IsPlayDurationSupported |
| Intervalo de pausa da reprodução | IsReplayPauseIntervalSupported |
if (hapticsController.IsIntensitySupported)
{
hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}
Artigos relacionados
Windows developer