Các bộ truyền động rung phổ biến nhất trên thiết bị Android là bộ truyền động cộng hưởng tuyến tính (LRA). LRA mô phỏng cảm giác nhấp vào nút trên một bề mặt kính không phản hồi. Tín hiệu phản hồi về lượt nhấp rõ ràng và sắc nét thường kéo dài từ 10 đến 20 mili giây. Cảm giác này giúp người dùng tương tác một cách tự nhiên hơn. Đối với bàn phím ảo, phản hồi lượt nhấp này có thể tăng tốc độ nhập và giảm lỗi.
LRA có một vài tần số cộng hưởng phổ biến:
- Một số LRA có tần số cộng hưởng trong khoảng từ 200 đến 300 Hz, trùng khớp với tần số mà da người nhạy cảm nhất với độ rung. Cảm giác rung ở dải tần số này thường được mô tả là mượt mà, sắc nét và xuyên thấu.
- Các mô hình LRA khác có tần số cộng hưởng thấp hơn, khoảng 150 Hz. Cảm giác về chất lượng mềm hơn và đầy đặn hơn (theo chiều).
Với cùng một điện áp đầu vào ở hai tần số khác nhau, biên độ đầu ra của độ rung có thể khác nhau. Tần số càng xa tần số cộng hưởng của LRA, biên độ dao động càng thấp.
Hiệu ứng xúc giác của một thiết bị nhất định sử dụng cả bộ truyền động rung và trình điều khiển của bộ truyền động đó. Trình điều khiển haptics có các tính năng tăng tốc và phanh chủ động có thể giảm thời gian tăng và độ rung của LRA, giúp độ rung rõ ràng và nhạy hơn.
Làm mượt dạng sóng mặc định trên thiết bị
Để minh hoạ, hãy xem xét cách hoạt động của mẫu dạng sóng tuỳ chỉnh trên một thiết bị chung:
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));
Các biểu đồ sau đây cho thấy dạng sóng đầu vào và gia tốc đầu ra tương ứng với các đoạn mã trước đó. Lưu ý rằng gia tốc tăng dần, không phải đột ngột, bất cứ khi nào có sự thay đổi bước của biên độ trong mẫu, tức là tại 0 mili giây, 150 mili giây, 200 mili giây, 250 mili giây và 700 mili giây. Ngoài ra, còn có hiện tượng vượt quá ở mỗi bước thay đổi biên độ và có hiện tượng rung rõ ràng kéo dài ít nhất 50 mili giây khi biên độ đầu vào đột ngột giảm xuống 0.
Cải thiện mẫu haptics
Để tránh vượt quá và giảm thời gian đổ chuông, hãy thay đổi biên độ một cách từ từ hơn. Sau đây là đồ thị dạng sóng và gia tốc của phiên bản sửa đổi:
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));
Tạo hiệu ứng xúc giác phức tạp hơn
Các thành phần khác trong phản hồi nhấp chuột thoả đáng phức tạp hơn, đòi hỏi một số kiến thức về LRA được sử dụng trong thiết bị. Để có kết quả tốt nhất, hãy sử dụng sóng được tạo sẵn và hằng số do nền tảng cung cấp của thiết bị. Điều này cho phép bạn làm những việc sau:
- Thực hiện các hiệu ứng rõ ràng và mẫu gốc.
- Kết hợp các hiệu ứng này để tạo hiệu ứng xúc giác mới.
Các hằng số và nguyên hàm xúc giác được xác định trước này có thể giúp bạn tăng tốc đáng kể trong khi tạo hiệu ứng xúc giác chất lượng cao.