При появлении диалогового окна обычно требуется затемнить или размыть окно фона, чтобы подчеркнуть важность текущего диалогового окна. Мы называем методы затемнения или размытия окна фона стратегией выделения диалоговых окон. Стратегию выделения диалоговых окон можно абстрагировать в виде интерфейса, разработчики могут реализовать собственные стратегии выделения с особыми эффектами или использовать стандартные стратегии выделения.
Стандартная стратегия выделения диалоговых окон затемняет окно фона. Она может быть статической (фиксированная альфа) или динамической. В динамической стратегии выделения во время анимации открытия диалогового окна окно фона постепенно затемняется, что обеспечивает лучший визуальный эффект, но требует больше вычислительных ресурсов. Разработчики могут выбрать статический или динамический эффект в зависимости от конкретной ситуации.
Стратегия выделения диалоговых окон задаётся через атрибут highlight в диалоговом окне. Значение «default» указывает на стандартную стратегию выделения диалоговых окон. Например:
Использование статического эффекта:
<dialog anim_hint="popdown" highlight="default(alpha=40)"
x="0" y="0" w="100%" h="160">
Использование динамического эффекта:
<dialog anim_hint="popup" highlight="default(start_alpha=0, end_alpha=80)"
x="0" y="bottom" w="100%" h="160">
Формат параметров аналогичен формату параметров вызова функции (func_call_params_format.md). Стандартная стратегия выделения поддерживает следующие параметры:
- Когда alpha = 0, визуальный эффект не меняется, но снимок окна фона кэшируется, что повышает эффективность отображения. Эту опцию можно использовать в особых случаях.
- Когда update_background = true, снимок окна нижнего уровня будет обновляться каждый кадр, что снижает эффективность. Эту опцию не рекомендуется использовать без необходимости.
Разработчики могут создавать собственные стратегии выделения, которые можно активировать в XML-файле аналогично встроенным стратегиям выделения.
static const dialog_highlighter_vtable_t s_dialog_highlighter_default_vt = {
.type = "dialog_highlighter_default_t",
.desc = "dialog_highlighter_default_t",
.size = sizeof(dialog_highlighter_default_t),
.prepare = dialog_highlighter_default_prepare,
.draw = dialog_highlighter_default_draw};
dialog_highlighter_t* dialog_highlighter_default_create(object_t* args) {
value_t v;
dialog_highlighter_t* h = dialog_highlighter_create(&s_dialog_highlighter_default_vt);
dialog_highlighter_default_t* dh = (dialog_highlighter_default_t*)h;
return_value_if_fail(h != NULL, NULL);
dh->end_alpha = 0;
dh->start_alpha = 0;
...
return h;
}
dialog_highlighter_factory_register(f, DIALOG_HIGHLIGHTER_DEFAULT,
dialog_highlighter_default_create);
Полный пример см.: https://github.com/zlgopen/awtk/tree/master/src/dialog_highlighters
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )