Thêm phản hồi xúc giác vào sự kiện

Một trong những trường hợp sử dụng cơ bản nhất của xúc giác là đưa ra phản hồi cho người dùng tương tác. Bộ chọn giờ, phím nhấn trên bàn phím ảo và văn bản lựa chọn là ví dụ phổ biến về các trường hợp sử dụng hợp lý đố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 thức áp dụng phản hồi xúc giác, đọc Nguyên tắc thiết kế về xúc giác.

Trang này mô tả ba cách cung cấp phản hồi xúc giác.

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 chất lượng cao ý kiến phản hồi được điều chỉnh cho phù hợp với thiết bị.

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 chạm của người dùng bằng cách mặc định.

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. Chiến lược phát hành đĩa đơn hằng số xúc giác do HapticFeedbackConstants xác định tập trung vào chức nă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ỳ thuộc vào 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 để đưa ra trong ngữ cảnh cụ thể. Bạn có thể bật công nghệ xúc giác bằng cách tập trung vào chức năng cho các lượt tương tác tương tự. Người dùng học cách liên kết các ý nghĩa khác nhau thành 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 phản hồi xúc giác

Miễn là View hiển thị, phản hồi xúc giác có thể được sử dụng cho các sự kiện của đối tượng này. Một số sự kiện, chẳng hạn như nhấn và giữ, có xúc giác mặc định được kích hoạt nếu trình nghe trên khung hiển thị sẽ xử lý sự kiện (trả về true).

View trên Android có thể tắt phản hồi xúc giác bằng cách đặt View.hapticFeedbackEnabled vào false. Vô hiệu hoá 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 ứng dụng đó cho toàn bộ hệ thống.

Không giống như các API xúc giác khá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ụ thể của thiết bị, vì các hằng số này sẽ có thành phần dự phòng nếu cần. Điểm cần cân nhắc duy nhất là cấp SDK của hằng số.

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 phương thức nhập bằng cách chạm trong View bằng trình nghe cảm ứng. Các hiệu ứng mô phỏng cảm giác nhấn xuống rồi thả nút 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 tương tác vật lý với thiết bị. Các cụm từ này cũng có thể được dùng để truyền tải ý nghĩa trừu tượng. Ví dụ: kỳ vọng chung đối với một Hiệu ứng CONFIRM là rung nhẹ và ngắn trong khi REJECT có thể là phản hồi mạnh hơn để báo hiệu không thành công. Điều này được minh hoạ trong ví dụ về nút gửi ý kiến phản hồ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

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. Đó là được ưu tiên sử dụng để đảm bảo tính nhất quán trên toàn hệ thống. Tuy nhiên, tùy chọn nhắm mục tiêu cụ thể API VibrationEffect cũng có thể được gọi để có phản hồi xúc giác tuỳ chỉnh các hiệu ứng.

Các hiệu ứng được xác định trước hiện có dưới dạng VibrationEffect hằng số và có thể là đã 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 khả năng hỗ trợ thiết bị của các API VibrationEffect

Trong sử dụng cơ bản, sẽ không cần kiểm tra sự hỗ trợ của từng cá nhân Các API VibrationEffect. Các API như Vibrator.areEffectsSupportedVibrator.areAllEffectsSupported được dùng để xác định xem thiết bị có cách triển khai tuỳ chỉnh của hằng số. Nếu hiệu ứng tuỳ chỉnh không hiện tại, ứng dụng của bạn vẫn có thể chạy các hiệu ứng và sử dụng một nền tảng do nền tảng xác định triển khai dự phòng.

Để biết thêm thông tin, hãy xem phần Được xác định trước VibrationEffect.

Điều kiện tiên quyết: Tải Bộ rung 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ể tải được 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 theo thứ tự để rung thiết bị bằng dịch vụ này. Bạn có thể thêm quyền 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 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 thành phần kết hợp nâng cao với dữ liệu gốc

API VibrationEffect.Composition cung cấp thêm khả năng để phản hồi xúc giác. Tuy nhiên, không giống như hiệu ứng, những dữ liệu gốc này không có dự phòng ở cấp hệ thống, tức là cần phải chú ý đến dữ liệu gốc và các tính 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 Tạo hiệu ứng xúc giác tuỳ chỉnh.