إضافة ملاحظات وآراء ملموسة إلى الأحداث

تتمثل إحدى أهم حالات الاستخدام الأساسية للّمس في تقديم الملاحظات لتفاعلات المستخدم. ومن الأمثلة الشائعة لحالات الاستخدام الجيدة للملاحظات الملموسة أدوات اختيار الوقت والضغط على المفتاح على لوحة مفاتيح افتراضية واختيار النص. لمزيد من المعلومات حول الوقت وكيفية تطبيق تقنية اللمس، يمكنك الاطّلاع على مبادئ تصميم تقنية اللمس.

تصف هذه الصفحة ثلاث طرق لتقديم ملاحظات ملموسة.

تستخدم هذه الطرق قواعد أولية محددة على مستوى الجهاز لتقديم ملاحظات عالية الجودة ومصممة خصيصًا للجهاز الذي يحتوي عليه الجهاز.

تلتزم جميع طرق الملاحظات الملموسة تلقائيًا بإعدادات الملاحظات والآراء باللمس لدى المستخدم.

استخدام مكوّنات View لإنشاء ملاحظات ملموسة

استخدِم طريقة View.performHapticFeedback لإنشاء ملاحظات ملموسة. تركز الثوابت الملموسة التي تحددها HapticFeedbackConstants على وظائفها في التطبيق، وليس على نوع التأثير اللمسي الذي يتم تنفيذه.

قد يختلف التنفيذ الأساسي بناءً على إمكانات الجهاز والأجهزة، ولكن لا يحتاج التطبيق إلا إلى مراعاة نوع التعليقات التي يقدمها في سياق معين. من خلال التركيز على الوظيفة، يمكنك تمكين الملاحظات اللمسية للتفاعلات المماثلة. يتعلم المستخدمون ربط معاني مختلفة بالأحاسيس الملموسة المختلفة بمرور الوقت.

المتطلّبات الأساسية: تفعيل الملاحظات الملموسة

طالما أنّ View مرئية، يمكن استخدام الملاحظات الملموسة في الأحداث. تحتوي بعض الأحداث، مثل الضغط مع الاستمرار، على تقنية اللمس التلقائية التي يتم تشغيلها إذا كان أحد المستمعين في طريقة العرض يتعامل مع الحدث (يتم عرض true).

يمكن لنظام View لنظام التشغيل Android إيقاف الملاحظات الملموسة من خلال ضبط السمة View.hapticFeedbackEnabled على false. يؤدي إيقاف هذه السمة إلى إدراج تعليقات تلقائية.

تلتزم طريقة performHapticFeedback أيضًا بإعداد النظام HAPTIC_FEEDBACK_ENABLED، ما يسمح للمستخدم بإيقافها على مستوى النظام بأكمله.

على عكس واجهات برمجة التطبيقات التي تعمل باللمس الأخرى، لا يتطلّب استخدام HapticFeedbackConstants مع View الحصول على الإذن VIBRATE.

اختيار HapticFeedbackConstant

عند استخدام مكوّنات View مع HapticFeedbackConstants، لا حاجة إلى تقييم دعم معيّن للجهاز، لأنّ هذه الثوابت سيكون لها سلوك احتياطي إذا لزم الأمر. الاعتبار الوحيد هو مستوى حزمة SDK الثابت المطلوب.

المثال 1: الضغط على مفتاح

هذا مثال على كيفية إضافة ملاحظات ملموسة إلى الإدخال باللمس في View باستخدام أدوات معالجة اللمس. تحاكي التأثيرات شعور الضغط على زر ثم تحريره.

Kotlin

class HapticTouchListener : View.OnTouchListener {
  override fun onTouch(View view, MotionEvent event) : Boolean {
    when (event.actionMasked) {
      MotionEvent.ACTION_DOWN ->
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY)
      MotionEvent.ACTION_UP ->
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE)
    }
    return true
  }
}

Java

class HapticTouchListener implements View.OnTouchListener {
  @Override
  public boolean onTouch(View view, MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
        break;
      case MotionEvent.ACTION_UP:
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE);
        break;
    }
    return true;
  }
}

المثال 2: زر الإرسال

إن حالات استخدام الملاحظات الملموسة تتجاوز محاكاة التفاعل الجسدي مع الجهاز. وقد تُستخدم أيضًا لنقل معنى مجرد. على سبيل المثال، التوقّع العام للتأثير CONFIRM هو اهتزاز قصير وخفيف، بينما قد يكون REJECT اهتزازًا أقوى للإشارة إلى تعذُّر الإشارة. ويتضح ذلك في المثال التالي لتعليقات زر الإرسال.

Kotlin

submitButton.setOnClickListener { view ->
  val successful = performSubmit()
  if (successful) {
    view.performHapticFeedback(HapticFeedbackConstants.CONFIRM)
  } else {
    view.performHapticFeedback(HapticFeedbackConstants.REJECT)
  }
}

Java

submitButton.setOnClickListener(view -> {
  boolean successful = performSubmit();
  if (successful) {
    view.performHapticFeedback(HapticFeedbackConstants.CONFIRM);
  } else {
    view.performHapticFeedback(HapticFeedbackConstants.REJECT);
  }
});

استخدام VibrationEffect محدّد مسبقًا لإنشاء ملاحظات ملموسة

يركز استخدام المنهج المستند إلى View على تفاعل المستخدم. هو المفضل لتحقيق الاتساق عبر النظام. ومع ذلك، يمكن أيضًا استدعاء واجهات برمجة تطبيقات VibrationEffect محددة محدّدة مسبقًا للحصول على تأثيرات مخصّصة للملاحظات الملموسة.

تتوفّر التأثيرات المحدّدة مسبقًا على شكل VibrationEffect ثابت، ويمكن التأكّد من أنّها متوافقة وتشغيلها من خلال خدمة Vibrator كما هو موضّح في الأمثلة التالية.

فهم إمكانية دعم الأجهزة لواجهات برمجة تطبيقات VibrationEffect

أمّا في حالة الاستخدام الأساسي، فلن تكون هناك حاجة إلى التحقّق من توافق واجهات برمجة تطبيقات VibrationEffect الفردية. ويتم استخدام واجهات برمجة التطبيقات، مثل Vibrator.areEffectsSupported وVibrator.areAllEffectsSupported، لتحديد ما إذا كان الجهاز يتضمّن تنفيذًا مخصصًا لهذه الثبات. في حال عدم توفّر تأثير مخصّص، لا يزال بإمكان تطبيقك تشغيل التأثيرات واستخدام تنفيذ احتياطي يحدّده النظام الأساسي.

لمزيد من التفاصيل، راجِع الميزات المحدّدة مسبقًا VibrationEffect.

المتطلبات الأساسية: تحميل أداة الاهتزاز وإذن "VIBRATE"

يمكن تشغيل معظم الاهتزازات باستخدام خدمة Vibrator، والتي يمكن تحميلها على النحو التالي:

Kotlin

import android.os.Vibrator

val vibrator = context.getSystemService(Vibrator::class.java)

Java

import android.os.Vibrator;

Vibrator vibrator = context.getSystemService(Vibrator.class);

يجب أن يحصل التطبيق على إذن VIBRATE لكي يهتز الجهاز باستخدام هذه الخدمة. يمكن إضافة الإذن إلى ملف بيان التطبيق:

<uses-permission android:name="android.permission.VIBRATE"/>

تشغيل VibrationEffect محدّد مسبقًا

يمكن إعداد التأثيرات المحدَّدة مسبقًا باستخدام VibrationEffect.createPredefined، ثم تشغيلها باستخدام إحدى طرق vibrate على Vibrator.

يشغّل هذا المثال تأثير النقر.

Kotlin

val vibrator = context.getSystemService(Vibrator::class.java)
...
// Requires VIBRATE permission
vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))

Java

Vibrator vibrator = context.getSystemService(Vibrator.class);
...
// Requires VIBRATE permission
vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));

استخدام تركيبات متقدمة مع خصائص أولية

توفّر واجهة برمجة التطبيقات VibrationEffect.Composition إمكانيات إضافية للحصول على ملاحظات ملموسة. ومع ذلك، على عكس التأثيرات، لا تحتوي هذه القواعد الأولية على عناصر احتياطية على مستوى النظام، وهذا يعني أنه ينبغي إيلاء اهتمام بالغ للقواعد الأساسية والإمكانات الأخرى التي يدعمها الجهاز.

تتم مناقشة استخدام واجهات برمجة التطبيقات هذه بمزيد من التفصيل في قسم إنشاء تأثيرات ملموسة مخصّصة.