1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zlgopen-awtk

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
how_to_enable_key_touch_sound.md 5.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 22:52 91e8897

Как включить звук клавиш

В некоторых приложениях при нажатии клавиш или касании экрана необходимо предоставить пользователю обратную связь:

  • Обратная связь обычно реализуется в виде звука или вибрации.
  • Тип звука может быть связан с конкретной клавишей. Например, в интерфейсе набора номера при нажатии разных цифр воспроизводится разный звук.
  • В одном и том же приложении требования к обратной связи в разных сценариях могут различаться, поэтому необходимо глобально включать или отключать обратную связь.

Поскольку AWTK сам по себе не предоставляет интерфейсы для вибрации и звука, AWTK предоставляет интерфейс ui_feedback, который позволяет разработчикам устанавливать функции обратного вызова для воспроизведения звука или вибрации.

1 Функция обратного вызова

Прототип и функция инициализации функции обратного вызова выглядят следующим образом:

/**
 * @method ui_on_feedback_t
 * Функция обратного вызова.
 *
 * @param {void*} ctx Контекст функции обратного вызова, переданный в ui_feedback_init.
 * @param {widget_t*} widget Объект компонента, для которого установлен атрибут feedback.
 * @param {event_t*} evt Объект события.
 * 
 * @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
 */
typedef ret_t (*ui_on_feedback_t)(void* ctx, widget_t* widget, event_t* evt);

/**
 * @method ui_feedback_init
 * Инициализация.
 * Устанавливает фактическую функцию обработки.
 *
 * @annotation ["static"]
 * @param {ui_on_feedback_t} on_feedback Фактическая функция обработки.
 * @param {void*} ctx Контекст функции обратного вызова.
 *
 * @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
 */
ret_t ui_feedback_init(ui_on_feedback_t on_feedback, void* ctx);

Обычно только часть компонентов требует предоставления обратной связи, поэтому компоненты по умолчанию не предоставляют функцию обратной связи. Необходимо установить атрибут feedback компонента в TRUE, и когда на этом компоненте происходят события нажатия клавиши (нажатие и отпускание) и события касания экрана (касание и отпускание), будет вызываться установленная разработчиком функция обратного вызова.

Разработчик может определить способ обратной связи на основе типа события, текущих настроек и других свойств компонента в функции обратного вызова.

2 Пример

Поскольку в AWTK нет интерфейса для вибрации или воспроизведения звука, здесь эта функция демонстрируется путём изменения текста. Реализовать вышеуказанные функциональные точки очень просто, шаги следующие:

(1) Установите атрибут «feedback» компонента «button» в файле пользовательского интерфейса равным true. Здесь необходимо установить «feedback = "true"» для кнопки «button», код выглядит следующим образом:

<window>
  <button name="button" x="60%" y="60%" w="20%" h="40" text="inc" feedback="true"/>
  <label name="label" x="c" y="60%" w="20%" h="40" text=""/>
</window>

(2) Вызовите интерфейс инициализации ui_feedback_init в коде C, код выглядит следующим образом:

static ret_t ui_on_btn_feedback(void* ctx, widget_t* widget, event_t* evt) {
  widget_t* win = (widget_t*)ctx;
  widget_t* label = widget_lookup(win, "label", TRUE);
  const char* name = widget_get_prop_str(widget, WIDGET_PROP_NAME, "");

  if (tk_str_eq(name, "button")) {
    if (evt->type == EVT_POINTER_DOWN) {
      widget_set_text_utf8(label, "point down");
    } else if (evt->type == EVT_POINTER_UP) {
      widget_set_text_utf8(label, "point up");
    }
  }
  return RET_OK;
}

/* 初始化 */
ret_t home_page_init(widget_t* win, void* ctx) {
  (void)ctx;
  return_value_if_fail(win != NULL, RET_BAD_PARAMS);

  widget_foreach(win, visit_init_child, win);
  ui_feedback_init(ui_on_btn_feedback, win);
    
  return RET_OK;
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/zlgopen-awtk.git
git@api.gitlife.ru:oschina-mirror/zlgopen-awtk.git
oschina-mirror
zlgopen-awtk
zlgopen-awtk
master