ใช้การตอบสนองแบบรู้สึกได้ในแอป 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) มีการอธิบายรายละเอียดเพิ่มเติมในการสร้างเอฟเฟกต์การสัมผัสที่กำหนดเอง