Kalem haptik (dokunsal) geri bildirim

Windows Uygulama SDK'sı uygulamanızda daha doğal ve dokunsal etkileşimler sağlamak için kalem cihazlarından gelen dokunsal geri bildirimleri kullanmayı öğrenin.

Windows 11 dijital kalemler için dokunsal geri bildirim sağlayarak kullanıcıların kalemlerinin uygulamanın kullanıcı arabirimiyle etkileşimde olduğunu hissetmelerini sağlar. Bu özellikten bahsederken, geliştirici API'lerinde ve belgelerde haptic kullanılırken, Windows Ayarları'nda gösterilen kullanıcıya dönük ad olarak dokunsal kullanılır.

Anahtar API'leri

Dokunsal geri bildirim türleri

İki tür dokunsal geri bildirim sağlanır:

  • Mürekkep geri bildirimi — Kalem ekrana temas ederken sürekli titreşimlerle yazma veya çizim araçlarının (tükenmez kalem, keçeli kalem, kurşun kalem, fosforlu kalem) hissini simüle eder.
  • Etkileşim geri bildirimi — Bir düğmenin üzerine gelme, tıklama veya tamamlanmış bir eylemi onaylama gibi kullanıcı eylemleri için kısa dokunsal sinyaller.

Kalem girişini algılama

Olaya kaydolun PointerEntered ve işaretçi cihaz türünün kalem olup olmadığını denetleyin:

private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
    {
        return;
    }

    // Pen detected — check for haptic support.
}

Windows Uygulama SDK'sı'da PenDevice'i edinme

Windows Uygulama SDK'sı uygulamasında, bir işaretçi noktasından WinRT PenDeviceInterop nesnesini almak için bir Windows Uygulama SDK'sı birlikte çalışma sınıfı olan PenDevice öğesini kullanın. PenDevice, SimpleHapticsController ve KnownSimpleHapticsControllerWaveforms, Windows.Devices.Input ve Windows.Devices.Haptics ad alanlarından gelen WinRT türleridir; yalnızca birlikte çalışma çağrısının kendisi Windows Uygulama SDK'sı’nin Microsoft.UI.Input.Interop ad alanından gelir:

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).
}

Uyarı

UWP uygulamalarında bunun yerine kullanın PenDevice.GetFromPointerId . PenDeviceInterop sınıfı Windows Uygulama SDK'sı özgüdür.

Mürekkepleme dalga formları

Kalem ekranla temas halindeyken mürekkep dalga biçimleri sürekli olarak oynatılır. Gerekli dalga formlarının herhangi bir dokunsal kalem tarafından desteklenmesi garanti edilir.

Dalga biçimi Description Gerekli
InkContinuous Varsayılan top nokta kalem hissi. Desteklenmeyen dalga biçimleri için geri dönüş. Yes
Sürekli Fırçalama Fırça aracı Hayır
KalemSürekli Kalem aracı Hayır
MarkerContinuous İşaretleme aracı Hayır
ChiselMarkerContinuous Keski işaretçisi / vurgulayıcı Hayır
EraserContinuous Silgi aracı Hayır
GalaxyPenContinuous Özel mürekkep (çok renkli fırça) Hayır

Etkileşim dalga formları

Etkileşim dalga biçimleri, kullanıcı arabirimi eylemleri için kısa ve doğrudan geri bildirim sağlar.

Dalga biçimi Description Gerekli
Tık Varsayılan kısa tıklama. Desteklenmeyen etkileşimler için yedek çözüm. Yes
Error Eylem başarısız oldu veya hata oluştu Hayır
Hover Etkileşimli bir öğenin üzerine gelme başladı Hayır
Basın Etkileşimli bir öğeye basma Hayır
Salıverme Etkileşimli bir öğe yayımladı Hayır
Success Eylem başarılı oldu Hayır
BuzzContinuous Sürekli vızıltı Hayır
RumbleContinuous Sürekli gümbürtü Hayır

Dokunsal geri bildirim gönderme

İstenen dalga biçimini bulmak için SupportedFeedback üzerinde yineleme yapın, ardından SendHapticFeedback çağrısını yapın:

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);
}

Dokunsal geri bildirimi durdurun

İşaretçi öğeden çıktığında her zaman dokunsal geri bildirimi durdurun. PointerExited için aynı öğe üzerinde kaydolun:

private void Canvas_PointerExited(object sender, PointerRoutedEventArgs e)
{
    hapticsController?.StopFeedback();
}

Uyarı

Bazı kalemler, kalem ekrandan ayrıldığında dokunsal geri bildirimi otomatik olarak durdurur. Ancak, tüm kalemler bunu yapmaz, bu nedenle her zaman açıkça çağır StopFeedback .

Dokunsal geri bildirimleri özelleştirme

Bazı kalemler ek özelleştirmeleri destekler. Bunları kullanmadan önce desteği denetleyin:

Mülkiyet Desteği şununla kontrol edin
Yoğunluk IsIntensitySupported
Oynatma sayısı IsPlayCountSupported
Oynatma süresi IsPlayDurationSupported
Duraklatma aralığını yeniden yürütme IsReplayPauseIntervalSupported
if (hapticsController.IsIntensitySupported)
{
    hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}