Triển khai tính năng phản hồi xúc giác trong các ứng dụng Android bằng cách sử dụng các thành phần Khung hiển thị, VibrationEffect API được xác định trước và các thành phần được cố định theo dòng thời gian bằng VibrationEffect.Builder. keywords_public: > Phát triển Android, xúc giác, phản hồi xúc giác, giao diện người dùng, khung hiển thị, VibrationEffect, View.performHapticFeedback, Vibrator, hằng số xúc giác
Một trong những trường hợp sử dụng cơ bản nhất của phản hồi xúc giác là cung cấp thông tin phản hồi cho các hoạt động tương tác của người dùng. Bộ chọn thời gian, thao tác nhấn phím trên bàn phím ảo và lựa chọn văn bản là những ví dụ phổ biến về các trường hợp sử dụng phản hồi xúc giác hiệu quả. Để biết thêm thông tin về thời điểm và cách áp dụng phản hồi xúc giác, hãy đọc bài viết Nguyên tắc thiết kế về xúc giác.
Trang này mô tả 3 cách cung cấp phản hồi xúc giác.
- Dùng
View(nên dùng). Phương pháp này hướng đến hành động, có phạm vi hỗ trợ rộng nhất và không yêu cầu quyềnVIBRATE. - Sử dụng
VibrationEffectđược xác định trước. Phương pháp này linh hoạt hơn nhưng có một số điểm hạn chế. - Sử dụng các thành phần được cố định theo dòng thời gian bằng
VibrationEffect.Builder. Đây là phương pháp linh hoạt nhất, cho phép bạn sắp xếp các chế độ đặt sẵn, bao thư và các thành phần rung khác theo một dòng thời gian có hỗ trợ dự phòng tự động tích hợp.
Các phương thức này sử dụng các thành phần cơ bản được xác định ở cấp thiết bị để cung cấp thông tin phản hồi chất lượng cao phù hợp với thiết bị đang dùng.
Theo mặc định, tất cả các phương thức phản hồi xúc giác đều tuân theo chế độ cài đặt phản hồi khi chạm của người dùng.
Sử dụng các thành phần View để tạo phản hồi xúc giác
Sử dụng phương thức View.performHapticFeedback để tạo phản hồi xúc giác. Các hằng số xúc giác do HapticFeedbackConstants xác định tập trung vào chức năng của chúng trong một ứng dụng, chứ không phải loại hiệu ứng xúc giác được thực hiện.
Việc triển khai cơ bản có thể khác nhau tuỳ thuộc vào thiết bị và khả năng phần cứng, nhưng ứng dụng chỉ cần xem xét loại ý kiến phản hồi cần cung cấp trong một bối cảnh cụ thể. Bằng cách tập trung vào chức năng, bạn có thể bật chế độ phản hồi xúc giác cho các hoạt động tương tác tương tự. Theo thời gian, người dùng sẽ học được cách liên kết các ý nghĩa khác nhau với các cảm giác xúc giác khác nhau.
Điều kiện tiên quyết: Bật tính năng phản hồi xúc giác
Miễn là View hiển thị, bạn có thể sử dụng phản hồi xúc giác cho các sự kiện của thành phần này.
Một số sự kiện, chẳng hạn như chạm và giữ, có phản hồi xúc giác mặc định sẽ kích hoạt nếu một trình nghe trên khung hiển thị xử lý sự kiện (trả về true).
View Android có thể tắt tính năng phản hồi xúc giác bằng cách đặt thuộc tính View.hapticFeedbackEnabled thành false. Việc tắt thuộc tính này sẽ dẫn đến phản hồi mặc định.
Phương thức performHapticFeedback cũng tuân theo chế độ cài đặt hệ thống HAPTIC_FEEDBACK_ENABLED. Chế độ này cho phép người dùng có thể tắt các chế độ cài đặt đó cho toàn bộ hệ thống.
Không giống như các API phản hồi xúc giác khác, việc sử dụng HapticFeedbackConstants với View không yêu cầu quyền VIBRATE.
Chọn một HapticFeedbackConstant
Khi sử dụng các thành phần View với HapticFeedbackConstants, bạn không cần đánh giá khả năng hỗ trợ của thiết bị cụ thể, vì các hằng số này sẽ có hành vi dự phòng nếu cần. Điều duy nhất cần cân nhắc là cấp độ SDK của hằng số mong muốn.
Ví dụ 1: Nhấn phím
Đây là ví dụ về cách thêm phản hồi xúc giác vào một thao tác nhập bằng cách chạm trong View bằng cách sử dụng trình nghe thao tác chạm. Các hiệu ứng này mô phỏng cảm giác nhấn nút rồi thả ra.
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; } }
Ví dụ 2: Nút gửi
Các trường hợp sử dụng phản hồi xúc giác không chỉ mô phỏng một hoạt động tương tác vật lý với thiết bị. Chúng cũng có thể được dùng để truyền tải một ý nghĩa trừu tượng. Ví dụ: kỳ vọng chung đối với hiệu ứng CONFIRM là một rung động nhẹ và ngắn, trong khi REJECT có thể là một phản hồi mạnh mẽ hơn để báo hiệu lỗi. Điều này được minh hoạ trong ví dụ sau về ý kiến phản hồi của nút gửi.
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); } });
Sử dụng VibrationEffect được xác định trước để tạo phản hồi xúc giác
Việc sử dụng phương pháp dựa trên View tập trung vào lượt tương tác của người dùng, vì vậy, hãy ưu tiên phương pháp này để đảm bảo tính nhất quán trên toàn hệ thống. Tuy nhiên, bạn cũng có thể gọi các API VibrationEffect cụ thể được xác định trước để có hiệu ứng phản hồi xúc giác tuỳ chỉnh.
Các hiệu ứng được xác định trước có sẵn dưới dạng hằng số VibrationEffect và có thể được kiểm tra để hỗ trợ và phát bằng dịch vụ Vibrator như minh hoạ trong các ví dụ sau.
Tìm hiểu về khả năng hỗ trợ thiết bị của các API VibrationEffect
Trong cách sử dụng cơ bản, bạn không cần kiểm tra xem từng API VibrationEffect có được hỗ trợ hay không. Các API như Vibrator.areEffectsSupported và Vibrator.areAllEffectsSupported được dùng để xác định xem thiết bị có một chế độ triển khai tuỳ chỉnh của hằng số hay không. Nếu không có hiệu ứng tuỳ chỉnh, ứng dụng của bạn vẫn có thể phát các hiệu ứng và sử dụng một phương thức triển khai dự phòng do nền tảng xác định.
Để biết thêm thông tin, hãy xem phần VibrationEffect được xác định trước.
Điều kiện tiên quyết: Tải Vibrator và quyền VIBRATE
Bạn có thể phát hầu hết các chế độ rung bằng dịch vụ Vibrator. Dịch vụ này có thể được tải như sau:
Kotlin
import android.os.Vibrator val vibrator = context.getSystemService(Vibrator::class.java)
Java
import android.os.Vibrator; Vibrator vibrator = context.getSystemService(Vibrator.class);
Ứng dụng của bạn phải có quyền VIBRATE để rung thiết bị bằng dịch vụ này. Bạn có thể thêm quyền này vào tệp kê khai ứng dụng:
<uses-permission android:name="android.permission.VIBRATE"/>
Phát một VibrationEffect được xác định trước
Bạn có thể chuẩn bị các hiệu ứng được xác định trước bằng cách dùng VibrationEffect.createPredefined, sau đó phát bằng một trong các phương thức vibrate trên Vibrator.
Ví dụ này phát hiệu ứng Nhấp.
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));
Dùng VibrationEffect.Builder để tạo thành phần
Kể từ Android 16 (quý 4 năm 2026), API VibrationEffect.Builder sẽ mang đến cách linh hoạt và biểu cảm nhất để tạo phản hồi xúc giác tuỳ chỉnh bằng cách sắp xếp các giá trị đặt sẵn, bao thư và các phần tử rung riêng biệt khác theo dòng thời gian.
Hơn nữa, các thành phần được tạo bằng VibrationEffect.Builder có tính năng hỗ trợ dự phòng tự động tích hợp trên các phần tử được hỗ trợ.
Việc tạo hiệu ứng xúc giác bằng VibrationEffect.Builder (và API VibrationEffect.Composition) sẽ được thảo luận chi tiết hơn trong phần Tạo hiệu ứng xúc giác tuỳ chỉnh.