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

OSCHINA-MIRROR/zlgopen-awtk

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

Контрольные анимации

Контрольные анимации — это распространённый вид анимаций, который используется для входа и выхода из сцены, украшения пользовательского интерфейса и привлечения внимания пользователя.

1. Типы анимаций

AWTK поддерживает следующие типы анимаций:

  • перемещение (move): изменение положения элемента управления для создания эффекта анимации;
  • значение (value): изменение значения элемента управления для создания эффекта анимации;
  • прозрачность (opacity): изменение прозрачности элемента управления для создания эффекта анимации;
  • масштаб (scale): изменение масштаба элемента управления для создания эффекта анимации (в настоящее время требуется vgcanvas);
  • вращение (rotation): изменение угла поворота элемента управления для создания эффекта анимации (в настоящее время требуется vgcanvas).

Также можно использовать другие числовые свойства, такие как x/y/w/h и т. д.

2. Основные характеристики

  • Поддержка обратного режима.
  • Поддержка остановки и паузы.
  • Поддержка выполнения по расписанию (задержка).
  • Поддержка повторного режима (можно указать количество повторений).
  • Поддержка двустороннего режима (можно указать количество повторов).
  • Поддержка различных алгоритмов интерполяции (например, ускорение и замедление).
  • Возможность одновременного выполнения нескольких анимаций для одного элемента управления.
  • Возможность последовательного выполнения нескольких анимаций на одном элементе управления.
  • Поддержка коэффициента времени, позволяющего ускорить или замедлить время.
  • Управление началом, паузой, остановкой и уничтожением анимации по имени.

3. Использование

Метод 1: через функцию widget_create_animator

Пример:

  1. Создание анимации:
widget_create_animator(image1, "opacity(to=0, duration=500, yoyo_times=1000)");
  1. Пауза указанной анимации:
widget_pause_animator(image1, "opacity");
  1. Пауза всех анимаций:
widget_pause_animator(NULL, NULL);
  1. Возобновление/запуск всех анимаций:
widget_start_animator(NULL, NULL);

По умолчанию анимация запускается автоматически после создания и завершается автоматически. Можно указать auto_start=false, чтобы запретить автоматический запуск после создания, и указать параметр auto_destroy=false, чтобы предотвратить автоматическое завершение при завершении анимации (анимация будет автоматически завершена при уничтожении элемента управления).

Функции для создания, воспроизведения, паузы, остановки, установки коэффициента времени и уничтожения анимации:

/**
 * @method widget_create_animator
 * Создаёт анимацию.
 * Если не указано auto_start=false, анимация запустится автоматически после создания.
 * Если не указано auto_destroy=false, анимация завершится автоматически после воспроизведения.
 * Формат параметров аналогичен вызову функции, например:
 * opacity(from=0, to=255, yoyo_times=1000, duration=1000)
 * move(x_from=10, x_to=100, y_from=10, y_to=100, duration=1000)
 * См.: https://github.com/zlgopen/awtk/blob/master/docs/widget_animator.md
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget Элемент управления.
 * @param {const char*} animation Параметры анимации.
 *
 * @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
 */
ret_t widget_create_animator(widget_t* widget, const char* animation);

/**
 * @method widget_start_animator
 * Воспроизводит анимацию.
 * 1. widget = NULL: воспроизвести все анимации с именем name.
 * 2. name = NULL: воспроизвести все связанные с widget анимации.
 * 3. widget и name оба равны NULL: воспроизвести все анимации.
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget Элемент управления.
 * @param {const char*} name Имя анимации.
 *
 * @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
 */
ret_t widget_start_animator(widget_t* widget, const char* name);

/**
 * @method widget_set_animator_time_scale
 * Устанавливает коэффициент времени анимации, <0: время возвращается назад, <1: время замедляется, >1 время ускоряется.
 * 1. widget = NULL: установить коэффициент времени для всех анимаций с именем name.
 * 2. name = NULL: установить коэффициент времени для всех связанных с widget анимаций.
 * 3. widget и name оба равны NULL: установить коэффициент времени для всех анимаций.
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget Элемент управления.
 * @param {const char*} name Имя анимации.
 * @param {float_t} time_scale Коэффициент времени.
 *
 * @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
 */
ret_t widget_set_animator_time_scope(widget_t* widget, const char* name, float_t time_scale);

/**
 * @method widget_pause_animator
 * Ставит анимацию на паузу.
 * 1. widget = NULL: поставить на паузу все анимации с именем name.
 * 2. name = NULL: поставить на паузу все связанные с widget анимации.
 * 3. widget и name оба равны NULL: поставить на паузу все анимации.
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget Элемент управления.
 * @param {char*} name Имя анимации.
 *
 * @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
 */
ret_t widget_pause_animator(widget_t* widget, const char* name);

/**
 * @method widget_stop_animator
 * Останавливает анимацию (свойства элемента управления возвращаются к исходному состоянию).
 * 1. widget = NULL: остановить все анимации с именем name.
 * 2. name = NULL: остановить все связанные с widget анимации.
 * 3. widget и name оба равны NULL: остановить все анимации.
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget Элемент управления.
 * @param {char*} name Имя анимации.
 *
 * @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
 */
ret_t widget_stop_animator(widget_t* widget, const char* name);

/**
 * @method widget_destroy_animator
 * Уничтожает анимацию.
 * 1. widget = NULL: уничтожить все анимации с именем name.
 * 2. name = NULL: уничтожить все связанные с widget анимации.
 * 3. widget и name оба равны NULL: уничтожить все анимации.
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget Элемент управления.
 * @param {char*} name Имя анимации.
 *
 * @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
 */
ret_t widget_destroy_animator(widget_t* widget, const char* name);

Способ 2: в XML указать параметры анимации

Формат параметров анимации аналогичен вызову функции. Несколько параметров разделяются символом «;». Например:

<button name="inc_value" text="Inc" animation="opacity(from=0, to=255, yoyo_times=1000, duration=1000)" />
<button name="dec_value" text="Dec" animation="move(x_from=10, x_to=100, y_from=10, y_to=100, duration=1000);opacity(from=0, to=255, yoyo_times=1000, duration=1000)" />

Этот метод является наиболее простым, в дальнейшем можно управлять анимацией по имени в программе, запускать и ставить на паузу анимацию.

Способ 3: прямое использование (больше не рекомендуется)

При использовании анимации элементов управления обычно необходимо выполнить четыре шага: создать анимацию, задать параметры, установить режим и запустить анимацию. Например:

animator = widget_animator_move_create(image, 1000, delay, EASING_SIN_INOUT);
widget_animator_move_set_params(animator, image->x, image->y,

Опубликовать ( 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