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

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

หน้านี้จะอธิบายวิธีแสดงการตอบกลับด้วยระบบสัมผัส 3 วิธี

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

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

ใช้คอมโพเนนต์ View เพื่อสร้างการตอบสนองแบบสัมผัส

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

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

ข้อกําหนดเบื้องต้น: เปิดใช้การตอบสนองแบบสัมผัส

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

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

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

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

เลือก HapticFeedbackConstant

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

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

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

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

ในการใช้งานพื้นฐาน คุณไม่จําเป็นต้องตรวจสอบการรองรับVibrationEffect API แต่ละรายการ ระบบจะใช้ API เช่น 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 จึงจะสั่นอุปกรณ์โดยใช้บริการนี้ได้ คุณสามารถเพิ่มสิทธิ์ลงในไฟล์ 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.Composition API เปิดโอกาสเพิ่มเติมสำหรับรีแอ็กชันการสัมผัส อย่างไรก็ตาม ต่างจากเอฟเฟกต์ตรงที่องค์ประกอบพื้นฐานเหล่านี้ไม่มีการแสดงผลสำรองระดับระบบ ซึ่งหมายความว่าคุณต้องพิจารณาองค์ประกอบพื้นฐานและความสามารถอื่นๆ ที่อุปกรณ์รองรับอย่างรอบคอบ

การใช้ API เหล่านี้จะอธิบายไว้อย่างละเอียดในหัวข้อการสร้างเอฟเฟกต์การสัมผัสที่กำหนดเอง