C 应用程序

  • 用户可以在视图控件中开发以制作互动和视觉吸引力用户界面。每个视图都可以任意切换,并在切换时应用动态过渡效果。

  • C 应用程序中显示的内容是使用已视图控件为父节点的嵌套控件树结构组织的。该结构包括诸如窗口和可滚动页面的容器控件,以及诸如文本、图像和画布之类的内容显示控件。

  • 除了默认功能和效果外, C 应用程序内的控件提供了高度的自定义性。用户可以为控件设置自定义定时器,并绑定事件以执行他们定义的操作。这种灵活性使得能够根据特定需求和要求创建高度动态和互动的用户界面。

创建 C 应用程序控件树

  • 控件树的根节点可以通过 gui_obj_get_root() 函数获取,并在此基础上创建一个新的控件树。控件树的根节点是一个 gui_obj_t 类型的对象,代表整个应用程序的顶层容器。

  • 通过控件创建函数,例如 gui_img_create_from_mem() ,可以在根节点下创建各种控件。每个控件都是基于 gui_obj_t 类型的对象,代表一个特定的用户界面元素。

  • 通过 gui_obj_add_event_cb() 函数可以为每种控件添加监听事件及回调函数,例如点击,滚动事件等。

  • 通过 gui_obj_create_timer() 函数可以为每种控件添加定时器,以便在特定时间间隔内执行某些操作。

  • 使用 GUI_INIT_APP_EXPORT 宏可以将应用程序的设计函数添加到初始化函数表。这个函数会在应用程序启动时被调用,以初始化和配置控件树。

void img_kb_cb(void *obj, gui_event_t *e)
{
    gui_obj_t *this = (gui_obj_t *)obj;
    const char *dev_name = e->indev_name ? (const char *)e->indev_name : "unknown";
    gui_log("Event test obj name = %s, e = 0x%x, indev = %s !\n", this->name, e->code, dev_name);
}

void img_tp_clicked_cb(void *obj, gui_event_t *e)
{
    GUI_UNUSED(obj);
    GUI_UNUSED(e);
    gui_log("Single clicked!\n");
}

void img_tp_double_clicked_cb(void *obj, gui_event_t *e)
{
    GUI_UNUSED(obj);
    GUI_UNUSED(e);
    gui_log("Double clicked!\n");
}

void img_tp_triple_clicked_cb(void *obj, gui_event_t *e)
{
    GUI_UNUSED(obj);
    GUI_UNUSED(e);
    gui_log("Triple clicked!\n");
}

void img_tp_long_pressed_cb(void *obj, gui_event_t *e)
{
    GUI_UNUSED(obj);
    GUI_UNUSED(e);
    gui_log("Touch long!\n");
}

void img_timer_cb(void *param)
{
    static float angle = 0;
    gui_img_t *img = (gui_img_t *)param;

    gui_img_rotation(img, angle++);

    gui_log("Handler[img] timer cb!\n");
}


static int app_init(void)
{
    void *addr = (void *)_actiger_blue;
    gui_dispdev_t *dc = gui_get_dc();

    gui_dirty_border_enable(true);

    // gui_img_t *img = gui_img_create_from_fs(gui_obj_get_root(),  "img_1_test", "/pc/example/application/screen_410_502/root_image/root/UI/cellular_menu_card.bin", 0, 0, 0, 0);
    gui_img_t *img = gui_img_create_from_mem(gui_obj_get_root(),  "img_test", addr, 0, 0, 0, 0);

    gui_img_set_focus(img, gui_img_get_width(img) / 2, gui_img_get_height(img) / 2);
    gui_img_rotation(img, 0.0f);
    gui_img_translate(img, dc->screen_width / 2, dc->screen_height / 2);

    gui_obj_add_event_cb(img, (gui_event_cb_t)img_tp_clicked_cb, GUI_EVENT_TOUCH_CLICKED, NULL);
    gui_obj_add_event_cb(img, (gui_event_cb_t)img_tp_double_clicked_cb, GUI_EVENT_TOUCH_DOUBLE_CLICKED,
                         NULL);
    gui_obj_add_event_cb(img, (gui_event_cb_t)img_tp_triple_clicked_cb, GUI_EVENT_TOUCH_TRIPLE_CLICKED,
                         NULL);
    gui_obj_add_event_cb(img, (gui_event_cb_t)img_tp_long_pressed_cb, GUI_EVENT_TOUCH_LONG, NULL);

    gui_obj_add_event_cb(img, (gui_event_cb_t)img_kb_cb, GUI_EVENT_KB_SHORT_PRESSED, NULL);
    gui_obj_focus_set(img);


    gui_obj_create_timer(&(img->base), 100, true, img_timer_cb);
    gui_obj_start_timer(&(img->base));


    return 0;
}

GUI_INIT_APP_EXPORT(app_init);

C 应用程序转场效果

HoneyGUI 提供丰富的转场效果,包括跟手滑动转场与非跟手动画转场,该功能需要用到 View 容器控件。具体使用请参考 视图 (View) 章节。