เพิ่มการตอบสนองแบบรู้สึกได้ในกิจกรรม

ใช้การตอบสนองแบบรู้สึกได้ในแอป Android โดยใช้คอมโพเนนต์ View, API ของ VibrationEffect ที่กำหนดไว้ล่วงหน้า และองค์ประกอบที่ยึดตามไทม์ไลน์ด้วย VibrationEffect.Builder keywords_public: > การพัฒนา Android, การโต้ตอบการสัมผัส, การตอบสนองแบบรู้สึกได้, UI, View, VibrationEffect, View.performHapticFeedback, Vibrator, ค่าคงที่ของการสัมผัส

กรณีการใช้งานพื้นฐานที่สุดอย่างหนึ่งของการตอบสนองแบบสัมผัสคือการให้ความคิดเห็นแก่การโต้ตอบของผู้ใช้ ตัวเลือกเวลา การกดแป้นบนแป้นพิมพ์เสมือน และการเลือกข้อความ เป็นตัวอย่างทั่วไปของ Use Case ที่ดีสำหรับการตอบสนองแบบรู้สึกได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับเวลาและวิธีใช้การสั่นได้ที่หลักการออกแบบการสั่น

หน้านี้จะอธิบาย 3 วิธีในการให้การตอบสนองแบบรู้สึกได้

  • ใช้ View (แนะนำ) แนวทางนี้มุ่งเน้นการดำเนินการ ได้รับการสนับสนุนอย่างกว้างขวางที่สุด และไม่จำเป็นต้องมีสิทธิ์ VIBRATE
  • ใช้ VibrationEffect ที่กำหนดไว้ล่วงหน้า วิธีนี้มีความยืดหยุ่นมากกว่า แต่ก็มีข้อเสียบางประการ
  • ใช้คอมโพสิตที่ยึดตามไทม์ไลน์กับ VibrationEffect.Builder วิธีนี้มีความยืดหยุ่นมากที่สุด ช่วยให้คุณจัดลำดับค่าที่กำหนดไว้ล่วงหน้า ซองจดหมาย และองค์ประกอบการสั่นอื่นๆ ตามไทม์ไลน์ด้วย การรองรับการเปลี่ยนเส้นทางอัตโนมัติในตัว

วิธีเหล่านี้ใช้องค์ประกอบพื้นฐานที่กำหนดไว้ที่ระดับอุปกรณ์เพื่อให้ความคิดเห็นคุณภาพสูง ซึ่งปรับให้เหมาะกับอุปกรณ์ที่ใช้งานอยู่

�

วิธีการสั่นทั้งหมดจะใช้การตั้งค่าการตอบสนองแบบรู้สึกได้ของผู้ใช้โดย ค่าเริ่มต้น

ใช้คอมโพเนนต์ View เพื่อสร้างการตอบสนองแบบรู้สึกได้

ใช้วิธี View.performHapticFeedback เพื่อสร้างการตอบสนองแบบรู้สึกได้ ค่าคงที่แบบสัมผัสที่กำหนดโดย HapticFeedbackConstants จะเน้นที่ ฟังก์ชันการทำงานในแอปพลิเคชัน ไม่ใช่ประเภทของเอฟเฟกต์แบบสัมผัสที่ดำเนินการ

การติดตั้งใช้งานพื้นฐานอาจแตกต่างกันไปตามอุปกรณ์และความสามารถของฮาร์ดแวร์ แต่แอปเพียงแค่ต้องพิจารณาประเภทของความคิดเห็นที่จะแสดง ในบริบทหนึ่งๆ การมุ่งเน้นที่ฟังก์ชันการทำงานจะช่วยให้คุณเปิดใช้การตอบสนองแบบสัมผัสสำหรับการโต้ตอบที่คล้ายกันได้ ผู้ใช้จะเรียนรู้ที่จะเชื่อมโยงความหมายต่างๆ กับความรู้สึกสัมผัสที่แตกต่างกันเมื่อเวลาผ่านไป

ข้อกำหนดเบื้องต้น: เปิดใช้การตอบสนองแบบรู้สึกได้

ตราบใดที่Viewปรากฏอยู่ คุณจะใช้การตอบสนองแบบรู้สึกได้กับเหตุการณ์ของได้ เหตุการณ์บางอย่าง เช่น การแตะค้างไว้ จะมีการโต้ตอบการสัมผัสเริ่มต้นซึ่งจะทริกเกอร์หาก Listener ในมุมมองจัดการเหตุการณ์ (ส่งคืน true)

Android View สามารถปิดใช้การตอบสนองแบบรู้สึกได้โดยตั้งค่าพร็อพเพอร์ตี้ View.hapticFeedbackEnabled เป็น false การปิดใช้พร็อพเพอร์ตี้นี้ จะทำให้ได้รับความคิดเห็นเริ่มต้น

เมธอด performHapticFeedback ยังใช้การตั้งค่าระบบ HAPTIC_FEEDBACK_ENABLED ซึ่งอนุญาตให้ผู้ใช้ปิดใช้ สำหรับทั้งระบบได้

การใช้ HapticFeedbackConstants กับ View ไม่จำเป็นต้องมีสิทธิ์ VIBRATE ซึ่งต่างจาก API การสั่นอื่นๆ

เลือก HapticFeedbackConstant

เมื่อใช้คอมโพเนนต์ View กับ HapticFeedbackConstants คุณไม่จำเป็นต้องประเมินการรองรับอุปกรณ์ที่เฉพาะเจาะจง เนื่องจากค่าคงที่เหล่านี้จะมีลักษณะการทำงานสำรองหากจำเป็น โดยจะพิจารณาเฉพาะระดับ SDK ของค่าคงที่ที่ต้องการ

ตัวอย่างที่ 1: การกดแป้น

ตัวอย่างวิธีเพิ่มการตอบสนองแบบรู้สึกได้ในการป้อนข้อมูลด้วยการสัมผัสใน View โดยใช้ Listener การสัมผัส เอฟเฟกต์จะจำลองความรู้สึกของการกดปุ่ม แล้วปล่อย

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 จะเน้นที่การโต้ตอบของผู้ใช้ จึงควรใช้เพื่อความสอดคล้องกันทั่วทั้งระบบ อย่างไรก็ตาม คุณยังเรียกใช้ API VibrationEffect ที่กำหนดไว้ล่วงหน้าเฉพาะเพื่อสร้างเอฟเฟกต์การตอบสนองแบบรู้สึกได้ที่กำหนดเองได้ด้วย

เอฟเฟกต์ที่กำหนดไว้ล่วงหน้าจะพร้อมใช้งานเป็นVibrationEffect ค่าคงที่ และสามารถ ตรวจสอบการรองรับและเล่นด้วยบริการ Vibrator ได้ตามที่แสดงใน ตัวอย่างต่อไปนี้

ทำความเข้าใจการรองรับอุปกรณ์ของ VibrationEffect API

ในการใช้งานขั้นพื้นฐาน คุณไม่จำเป็นต้องตรวจสอบการรองรับ API ของแต่ละVibrationEffectรายการ ระบบจะใช้ API เช่น Vibrator.areEffectsSupported และ Vibrator.areAllEffectsSupported เพื่อพิจารณาว่าอุปกรณ์มีการติดตั้งใช้งานค่าคงที่ที่กำหนดเองหรือไม่ หากไม่มีเอฟเฟกต์ที่ปรับแต่งไว้ แอปจะยังคงเล่นเอฟเฟกต์และใช้การติดตั้งใช้งานสำรองที่แพลตฟอร์มกำหนดได้

ดูรายละเอียดเพิ่มเติมได้ที่ค่าที่กำหนดไว้ล่วงหน้า VibrationEffect

ข้อกำหนดเบื้องต้น: โหลด Vibrator และสิทธิ์ 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 เพื่อสั่น อุปกรณ์โดยใช้บริการนี้ คุณเพิ่มสิทธิ์นี้ลงในไฟล์ Manifest ของแอปพลิเคชันได้โดยทำดังนี้

<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 เพื่อสร้างผลงาน

ตั้งแต่ Android 16 (ไตรมาสที่ 4 ปี 2026) เป็นต้นไป VibrationEffect.Builder API จะมอบวิธีที่ยืดหยุ่นและแสดงออกได้มากที่สุด ในการสร้างการตอบสนองแบบรู้สึกได้ที่กำหนดเองโดยการจัดลำดับ ค่าที่กำหนดไว้ล่วงหน้าแบบแยกส่วน เอนเวโลป และองค์ประกอบการสั่นอื่นๆ ตามไทม์ไลน์ นอกจากนี้ องค์ประกอบที่สร้างด้วย VibrationEffect.Builder ยังมี การรองรับการเปลี่ยนเส้นทางอัตโนมัติในตัวสำหรับองค์ประกอบที่รองรับ

การสร้างเอฟเฟกต์การสัมผัสด้วย VibrationEffect.Builder (และ VibrationEffect.Composition API) มีการอธิบายรายละเอียดเพิ่มเติมในการสร้างเอฟเฟกต์การสัมผัสที่กำหนดเอง