ตัวกระตุ้นการสั่นที่พบบ่อยที่สุดในอุปกรณ์ Android คือตัวกระตุ้นแบบเชิงเส้นที่ทำงานตามแรงสั่นสะเทือน (LRA) LRA จำลองความรู้สึกของการกดปุ่มบนพื้นผิวกระจกที่ไม่ตอบสนอง สัญญาณการตอบกลับการคลิกที่ชัดเจนและคมชัดมักจะมีระยะเวลาระหว่าง 10 ถึง 20 มิลลิวินาที ความรู้สึกนี้ช่วยให้การโต้ตอบของผู้ใช้ดูเป็นธรรมชาติมากขึ้น สำหรับแป้นพิมพ์เสมือนจริง ฟีดแบ็กการคลิกนี้จะช่วยเพิ่มความเร็วในการพิมพ์และลดข้อผิดพลาด
LRA มีความถี่ในการสั่นทั่วไป 2-3 รายการดังนี้
- LRA บางตัวมีความถี่เรโซแนนซ์ในช่วง 200 ถึง 300 Hz ซึ่งตรงกับความถี่ที่ผิวหนังของมนุษย์ไวต่อการสั่นสะเทือนมากที่สุด ความรู้สึกของการสั่นในช่วงความถี่นี้มักจะอธิบายว่าราบรื่น คมชัด และเจาะลึก
- LRA รุ่นอื่นๆ มีค่าความถี่เรโซแนนซ์ต่ำกว่า โดยอยู่ที่ประมาณ 150 Hz เสียงที่ได้จะนุ่มนวลและเต็มกว่า (ในแง่ของมิติข้อมูล)
เมื่อใช้แรงดันไฟฟ้าอินพุตเดียวกันที่ความถี่ 2 ค่าที่แตกต่างกัน ระดับความแรงของสัญญาณเอาต์พุตการสั่นอาจแตกต่างกัน ยิ่งความถี่อยู่ห่างจากความถี่เรโซแนนซ์ของ LRA มากเท่าใด แอมพลิจูดการสั่นก็จะยิ่งต่ำลงเท่านั้น
เอฟเฟกต์การสัมผัสของอุปกรณ์หนึ่งๆ ใช้ทั้งตัวกระตุ้นการสั่นและไดรเวอร์ ตัวขับการสัมผัสที่มีฟีเจอร์โอเวอร์ไดรฟ์และการเบรกแบบแอ็กทีฟจะช่วยลดเวลาในการตอบสนองและการสั่นของ LRA ซึ่งทำให้การสั่นตอบสนองได้เร็วและชัดเจนยิ่งขึ้น
การปรับรูปคลื่นเริ่มต้นในอุปกรณ์
ต่อไปนี้เป็นภาพประกอบลักษณะการทำงานของรูปแบบคลื่นที่กำหนดเองในอุปกรณ์ทั่วไป
Kotlin
val timings: LongArray = longArrayOf(50, 50, 50, 50, 50, 100, 350, 250)
val amplitudes: IntArray = intArrayOf(77, 79, 84, 99, 143, 255, 0, 255)
val repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] { 50, 50, 50, 50, 50, 100, 350, 250 };
int[] amplitudes = new int[] { 77, 79, 84, 99, 143, 255, 0, 255 };
int repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
ผังต่อไปนี้แสดงรูปแบบคลื่นอินพุตและอัตราเร่งเอาต์พุตซึ่งสอดคล้องกับข้อมูลโค้ดก่อนหน้า โปรดทราบว่าความเร่งจะเพิ่มขึ้นอย่างช้าๆ ไม่ใช่ทันทีทุกครั้งที่มีการเปลี่ยนแปลงความกว้างของรูปแบบแบบขั้นๆ ซึ่งก็คือที่ 0 มิลลิวินาที, 150 มิลลิวินาที, 200 มิลลิวินาที, 250 มิลลิวินาที และ 700 มิลลิวินาที นอกจากนี้ ยังมีค่าเกินที่การเปลี่ยนแปลงของระดับแอมพลิจูดแต่ละขั้น และมีการดังก้องที่มองเห็นได้นานอย่างน้อย 50 มิลลิวินาทีเมื่อระดับแอมพลิจูดอินพุตลดลงเป็น 0 อย่างฉับพลัน
รูปแบบการสัมผัสที่ปรับปรุงใหม่
หากต้องการหลีกเลี่ยงการเกินและลดเวลาในการส่งเสียง ให้เปลี่ยนแอมพลิจูดอย่างค่อยเป็นค่อยไป ต่อไปนี้แสดงรูปแบบคลื่นและผังความเร่งของเวอร์ชันที่แก้ไขแล้ว
Kotlin
val timings: LongArray = longArrayOf(
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
)
val amplitudes: IntArray = intArrayOf(
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
)
val repeatIndex = -1 // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] {
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
};
int[] amplitudes = new int[] {
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
};
int repeatIndex = -1; // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
สร้างเอฟเฟกต์การสัมผัสที่ซับซ้อนมากขึ้น
องค์ประกอบอื่นๆ ในการตอบสนองการคลิกที่ตรงใจมีความซับซ้อนกว่า และต้องมีความรู้เกี่ยวกับ LRA ที่ใช้ในอุปกรณ์ ใช้รูปแบบคลื่นที่สร้างไว้ล่วงหน้าของอุปกรณ์และค่าคงที่ที่แพลตฟอร์มให้ไว้เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด ซึ่งจะช่วยให้คุณทำสิ่งต่อไปนี้ได้
- แสดงเอฟเฟกต์และองค์ประกอบพื้นฐานที่ชัดเจน
- ต่อกันเพื่อสร้างเอฟเฟกต์การสัมผัสแบบใหม่
ค่าคงที่และองค์ประกอบพื้นฐานของการสัมผัสที่กําหนดไว้ล่วงหน้าเหล่านี้จะช่วยเร่งงานของคุณได้อย่างมากขณะสร้างเอฟเฟกต์การสัมผัสคุณภาพสูง