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

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

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

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

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

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

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

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

สิ่งที่ต้องมีก่อน: เปิดใช้การตอบสนองแบบรู้สึกได้

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

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

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

วิธีนี้ต่างจาก API แบบรู้สึกได้อื่นๆ ตรงที่ใช้ HapticFeedbackConstants กับ View ไม่ต้องใช้สิทธิ์ VIBRATE

เลือก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 ดังที่แสดงใน ดังตัวอย่างต่อไปนี้

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

ในการใช้งานขั้นพื้นฐาน ไม่จำเป็นต้องตรวจสอบการสนับสนุนจากบุคคล 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));

ใช้การเรียบเรียงขั้นสูงกับ (Primitives)

VibrationEffect.Composition API มีความสามารถเพิ่มเติมสำหรับ การตอบสนองแบบรู้สึกได้ อย่างไรก็ตาม ต่างจากเอฟเฟ็กต์ตรงที่ค่าดั้งเดิมเหล่านี้ไม่มี วิดีโอสำรองระดับระบบ ซึ่งหมายความว่าคุณต้องใส่ใจเป็นพิเศษ ค่าพื้นฐานและความสามารถอื่นๆ ที่อุปกรณ์รองรับ

เราจะกล่าวถึงการใช้ API เหล่านี้โดยละเอียดยิ่งขึ้นใน การสร้างเอฟเฟกต์ Haptic ที่กำหนดเอง