ก่อนที่จะออกแบบเอฟเฟกต์แบบรู้สึกได้บนอุปกรณ์ Android วิธีนี้จะช่วยให้ ภาพรวมการทำงานของตัวกระตุ้นการสั่น
ตัวกระตุ้นการสั่นสะเทือนที่พบบ่อยที่สุดคือ Linear Resonant Actuator (LRA) ชิ้น LRA ประกอบด้วยคอยล์เสียงที่กดทับมวลแม่เหล็กที่เคลื่อนที่ ซึ่งแนบกับสปริง แรงดันไฟฟ้า AC ที่ใช้กับคอยล์เสียงจะสร้าง แรงแม่เหล็กไฟฟ้าที่ทำให้มวลเคลื่อนที่ ฤดูใบไม้ผลิจะมี การคืนค่าแรงที่ทำให้มวลกลับสู่ตำแหน่งเริ่มต้น การเคลื่อนที่กลับไปกลับมาทำให้ LRA สั่น พวกเขามี ความถี่เรโซแนนซ์ที่มีเอาต์พุตสูงสุด
ด้วยแรงดันไฟฟ้าอินพุตเดียวกันที่ความถี่ 2 ความถี่ที่แตกต่างกัน เอาต์พุตการสั่น แอมพลิจูดอาจแตกต่างกัน ยิ่งความถี่ห่างจาก LRA ความถี่สะท้อน ยิ่งแอมพลิจูดการสั่นต่ำลงเท่าใด
ฟังก์ชันทั่วไปอย่างหนึ่งของ LRA ในอุปกรณ์คือการจำลองความรู้สึกของปุ่ม คลิกที่พื้นผิวกระจกที่ไม่ตอบสนอง ทำให้การโต้ตอบของผู้ใช้รู้สึก เป็นธรรมชาติมากขึ้น เมื่อใช้กับการพิมพ์บนแป้นพิมพ์เสมือน การคลิกความคิดเห็นจะ เพิ่มความเร็วในการพิมพ์และลดข้อผิดพลาด สัญญาณความคิดเห็นเกี่ยวกับการคลิกที่ชัดเจนและชัดเจน โดยปกติจะมีความยาวน้อยกว่า 10 ถึง 20 มิลลิวินาที การได้รับการคลิกที่ดี ซึ่งจำเป็นต้องมีความรู้บางอย่างเกี่ยวกับ LRA ที่ใช้ในอุปกรณ์ นี่คือเหตุผลที่การพึ่งพา รูปแบบคลื่นที่ประกอบไว้ล่วงหน้าจะให้ผลตอบรับที่ดีที่สุดสำหรับการคลิก คุณสามารถใช้ ด้วยข้อมูลคงที่ที่แพลตฟอร์มมีให้ เมื่อใดก็ตามที่มีการคลิกตอบสนอง ที่จำเป็น
ผลการตอบสนองแบบรู้สึกได้ในอุปกรณ์จะกำหนดโดยการสั่น ตัวดำเนินการและคนขับ ไดรเวอร์ Haptic ที่มีโอเวอร์ไดรฟ์และแอ็กทีฟ คุณสมบัติเบรกจะช่วยลดเวลาการเพิ่มขึ้นและเสียงเรียกเข้าของ LRA ซึ่งทำให้ ตอบสนองดีและการสั่นสะเทือนที่ชัดเจน สำหรับภาพประกอบ เราลองมาดูวิธีกำหนดค่า รูปแบบ Waveform จะทำงานบนอุปกรณ์ทั่วไป
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 // Do not 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 // Do not repeat. vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
พล็อตด้านล่างแสดง Waveform ที่สอดคล้องกับข้อมูลโค้ดที่แสดง ที่ด้านบน
ความเร่งที่สอดคล้องกันแสดงอยู่ด้านล่าง
โปรดทราบว่าการเร่งความเร็วจะเพิ่มขึ้นทีละน้อย ไม่ใช่ในทันที การเปลี่ยนแปลงระดับแอมพลิจูดในรูปแบบนี้ (เช่น ที่ 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));
โดยจะทำตามว่าการสร้างการตอบสนองแบบรู้สึกได้ในอุปกรณ์ Android ต้องใช้ระยะเวลามากกว่า เพื่อระบุความถี่และค่าแอมพลิจูด เพราะการออกแบบเว็บไซต์ไม่ใช่งานหนัก การตอบสนองแบบรู้สึกได้ตั้งแต่ต้นโดยไม่มีสิทธิ์เข้าถึงข้อกำหนดทางวิศวกรรมอย่างเต็มรูปแบบ ของตัวกระตุ้นการสั่นสะเทือนและคนขับ Android API มีค่าคงที่ที่ ช่วยให้คุณทำสิ่งต่อไปนี้ได้
สร้างเอฟเฟกต์และพื้นฐานที่ชัดเจน
ให้เชื่อมต่อเพื่อสร้างเอฟเฟกต์แบบรู้สึกได้ใหม่
ค่าคงที่แบบรู้สึกได้และตัวแปรพื้นฐานที่กำหนดไว้ล่วงหน้าเหล่านี้ช่วยให้คุณทำงานได้เร็วขึ้นอย่างมาก ในขณะเดียวกันก็มั่นใจได้ว่ามีผลกระทบแบบรู้สึกมีคุณภาพสูง