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

يمكنك تنفيذ ميزة "الارتجاج اللمسي" في تطبيقات Android باستخدام مكوّنات View وواجهات برمجة التطبيقات VibrationEffect المحدّدة مسبقًا والتركيبات المستندة إلى المخطط الزمني باستخدام VibrationEffect.Builder. keywords_public: > تطوير تطبيقات Android، والارتجاج اللمسي، والارتجاج اللمسي، وواجهة المستخدم، وعناصر View، وVibrationEffect، وView.performHapticFeedback، وVibrator، والثوابت اللمسية

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

توضّح هذه الصفحة ثلاث طرق لتقديم تجاوب حسّي.

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

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

تلتزم جميع طرق التجاوب الحسّي بإعدادات الملاحظات اللمسية التي يضبطها المستخدم تلقائيًا.

استخدام مكوّنات View لإنشاء تجاوب حسّي

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

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

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

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

يمكن لجهاز Android View إيقاف التجاوب الحسّي من خلال ضبط السمة 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.Builder لإنشاء مقاطع موسيقية

بدءًا من الإصدار 16 من نظام التشغيل Android (الربع الرابع من 2026)، توفّر واجهة برمجة التطبيقات VibrationEffect.Builder الطريقة الأكثر مرونةً وتعبيرًا لإنشاء تجاوب حسّي مخصّص من خلال ترتيب الإعدادات المُسبقة المنفصلة والأغلفة وعناصر الاهتزاز الأخرى على طول المخطط الزمني. بالإضافة إلى ذلك، تتضمّن التصاميم التي تم إنشاؤها باستخدام VibrationEffect.Builder ميزة احتياطية تلقائية مدمجة في جميع عناصرها المتوافقة.

يمكنك الاطّلاع على تفاصيل أكثر حول إنشاء تأثيرات لمسية باستخدام VibrationEffect.Builder (وواجهة برمجة التطبيقات VibrationEffect.Composition) في مقالة إنشاء تأثيرات لمسية مخصّصة.