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à đưa ra ý kiến phản hồi về hoạt động tương tác của người dùng. Bộ chọn giờ, thao tác nhấn phím trên bàn phím ảo và lựa chọn văn bản là các ví dụ phổ biến về những trường hợp sử dụng phù hợp đối với phản hồi xúc giác. Để biết thêm thông tin về thời điểm và cách áp dụng xúc giác, hãy đọc Nguyên tắc thiết kế của xúc giác.
Trang này mô tả 3 cách để cung cấp phản hồi xúc giác.
- Sử dụng
View
(nên dùng). Phương pháp này mang tính định hướng hành động, có khả năng 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ố yếu tố đánh đổi. - Sử dụng các thành phần nâng cao với các thuộc tính gốc. Phương thức này mới hơn và thậm chí linh hoạt hơn, nhưng yêu cầu hỗ trợ thiết bị cụ thể.
Các phương thức này sử dụng dữ liệu gốc được xác định ở cấp thiết bị để cung cấp phản hồi chất lượng cao phù hợp với thiết bị đang sử dụng.
Theo mặc định, tất 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 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 ứng dụng, chứ không phải loại hiệu ứng xúc giác được thực hiện.
Cách triển khai cơ bản có thể khác nhau tuỳ theo khả năng của thiết bị và phần cứng, nhưng ứng dụng chỉ cần xem xét loại phản hồi để cung cấp trong một ngữ cảnh cụ thể. Bằng cách tập trung vào chức năng, bạn có thể bật tính năng phản hồi xúc giác cho các hoạt động tương tự. Người dùng họ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 theo thời gian.
Đ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
còn hiển thị, phản hồi xúc giác có thể được dùng cho các sự kiện.
Một số sự kiện, chẳng hạn như nhấn và giữ, sẽ kích hoạt phản hồi xúc giác mặc định nếu một trình nghe trên khung hiển thị xử lý sự kiện (trả về true
).
View
trên 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
, cho phép người dùng có thể tắt các chế độ cài đặt đó trên toàn bộ hệ thống.
Không giống như các API 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ợ 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. Yếu tố duy nhất cần xem xét 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 dùng trình nghe thao tác chạm để thêm phản hồi xúc giác vào phương thức nhập bằng cách chạm trong View
. Các hiệu ứng này mô phỏng cảm giác nhấn nút xuống 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ỉ dừng lại ở việc mô phỏng tương tác vật lý với thiết bị. Cũng có thể dùng các thành phần này để truyền tải ý nghĩa trừu tượng. Ví dụ: kỳ vọng chung đối với hiệu ứng CONFIRM
là độ rung ngắn và nhẹ trong khi REJECT
có thể là phản hồi mạnh 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 về 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); } });
Dùng một VibrationEffect
được xác định trước để tạo phản hồi xúc giác
Phương pháp sử dụng dựa trên View
sẽ tập trung vào hoạt động tương tác của người dùng. Ưu tiên 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ể đã xác định trước để có các hiệu ứng phản hồi xúc giác tuỳ chỉnh.
Các hiệu ứng định sẵn được cung cấp dưới dạng hằng số VibrationEffect
, có thể được kiểm tra để xem có hỗ trợ không và phát bằng dịch vụ Vibrator
như trong các ví dụ sau.
Tìm hiểu về tính 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 khả năng hỗ trợ của từng API VibrationEffect
. Các API như Vibrator.areEffectsSupported
và Vibrator.areAllEffectsSupported
được dùng để xác định xem thiết bị có cách triển khai hằng số tuỳ chỉnh 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 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 mục Được xác định trước VibrationEffect
.
Đ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
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ần 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 định sẵn bằng cách sử 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 chuột.
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));
Sử dụng các thành phần nâng cao có dữ liệu gốc
API VibrationEffect.Composition
cung cấp thêm các khả năng phản hồi xúc giác. Tuy nhiên, không giống như hiệu ứng, các dữ liệu gốc này không có bản dự phòng ở cấp hệ thống. Điều này có nghĩa là bạn cần chú ý kỹ đến các dữ liệu gốc và các chức năng khác mà thiết bị hỗ trợ.
Việc sử dụng các API này sẽ được thảo luận chi tiết hơn trong bài viết Tạo hiệu ứng xúc giác tuỳ chỉnh.