กรณีการใช้งานพื้นฐานที่สุดอย่างหนึ่งของรีแอ็กชันคือการให้ฟีดแบ็กสำหรับการโต้ตอบของผู้ใช้ เครื่องมือเลือกเวลา การกดแป้นบนแป้นพิมพ์เสมือน และการเลือกข้อความเป็นตัวอย่างที่พบบ่อยของ Use Case ที่ดีสำหรับการตอบสนองแบบสัมผัส อ่านข้อมูลเพิ่มเติมเกี่ยวกับเวลาและวิธีใช้การสัมผัสได้ที่หลักการการออกแบบการสัมผัส
หน้านี้จะอธิบายวิธีแสดงการตอบกลับด้วยระบบสัมผัส 3 วิธี
- ใช้
View
(แนะนำ) แนวทางนี้มุ่งเน้นการดำเนินการ รองรับได้มากที่สุด และไม่ต้องใช้สิทธิ์VIBRATE
- ใช้
VibrationEffect
ที่กําหนดไว้ล่วงหน้า วิธีการนี้มีความยืดหยุ่นมากกว่า แต่ก็มีข้อเสียบางอย่าง - ใช้การคอมโพสขั้นสูงกับองค์ประกอบพื้นฐาน วิธีนี้ใหม่กว่าและยืดหยุ่นกว่า แต่อุปกรณ์ต้องรองรับ
วิธีการเหล่านี้ใช้องค์ประกอบพื้นฐานที่กําหนดไว้ที่ระดับอุปกรณ์เพื่อให้ความคิดเห็นคุณภาพสูงที่ปรับให้เหมาะกับอุปกรณ์ที่ใช้
วิธีการทั้งหมดของฟีเจอร์การสัมผัสจะให้ผลตามการตั้งค่าการสัมผัสของผู้ใช้โดยค่าเริ่มต้น
ใช้คอมโพเนนต์ 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 เหล่านี้จะอธิบายไว้อย่างละเอียดในหัวข้อการสร้างเอฟเฟกต์การสัมผัสที่กำหนดเอง