UI架构设计 一

在开发了不少只能穿戴类的手表后,做上层的UI应用开发,系统的总结和规划了一下UI显示架构,足够使用普通的手表UI应用开发。下面来介绍一个UI架构的一个结构体,也是贯穿全程的重要节点!

//activity_page.h 文件里面的各种定义

#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define OS_MALLOC   malloc
#define OS_FREE     free

#define QPRINTF     printf

typedef enum {
    UNKNOW_EVENT = 0,
    PRESS_EVENT,
    UP_SLIDE_EVENT,
    DOWN_SLIDE_EVENT,
    LEFT_SLIDE_EVENT,
    RIGHT_SLIDE_EVENT,
    LONG_PRESS_EVENT,
    DOWN_EDGE_SLIDE_EVENT,
} tp_event_type_t; //TP的各种事件


typedef struct {
    tp_event_type_t type;
    int x;
    int y;
} tp_event_t;


typedef struct {
    uint8_t main_item;
    uint8_t second_item;
    bool is_notif;
}main_page_t;//UI界面的item归类


typedef void (*key_event_func_t) (void *data);//按键函数原型
typedef void (*touch_event_func_t) (tp_event_t *tp_event);//触摸函数原型
typedef void (*create_frame_func_t) (void *data);//新建一个窗体执行函数原型
typedef bool(*handle_func_t) (void *data);//定时更新函数原型
typedef void (*free_data_func_t) (void *data);//资源释放函数原型


typedef struct {
    touch_event_func_t touch_event_func;
    key_event_func_t key_event_func;
}input_event_t;//input事件类型集合,以后可扩展

typedef struct {
    main_page_t main_page;
    input_event_t input_event;

    create_frame_func_t create_frame_func;
    void *create_data;

    handle_func_t update_handle_func;
    void *update_data;

    handle_func_t animation_handle_func;
    void *animation_data;

    free_data_func_t free_data_func;
    void *free_data;
} activity_page_t;


void activity_page_data_init(const activity_page_t * data);







//activity_page.c //实现原型



#include "activity_page.h"

static activity_page_t g_activity_page;//定义全局的UI 窗体的结构体

void activity_page_data_init(const activity_page_t * activity_page)//本函数在每次新建一个窗体时调用,释放上一个窗体的资源
{
    void *ptr = NULL;
    create_frame_func_t create_frame = NULL;;

    QPRINTF("Old UI: (%d : %d) %d\n\r", g_activity_page.main_page.main_item,
          g_activity_page.main_page.second_item, g_activity_page.main_page.is_notif);//打印调试信息

    if (g_activity_page.update_data) {//释放刷新的资源
        OS_FREE(g_activity_page.update_data);
    }

    if (g_activity_page.main_page.is_notif) {//窗体当消息通知时的处理
        create_frame = g_activity_page.create_frame_func;
        ptr = g_activity_page.create_data;
    } else {
        if (g_activity_page.create_data) {
            OS_FREE(g_activity_page.create_data);
        }
    }

    if (g_activity_page.free_data_func) {
        g_activity_page.free_data_func(g_activity_page.free_data);
    }

    if (g_activity_page.free_data) {
        OS_FREE(g_activity_page.free_data);
    }

    QPRINTF("free ok\n\r");

    if (activity_page) {
        memcpy(&g_activity_page, activity_page, sizeof(activity_page_t));
    } else {
        memset(&g_activity_page, 0x0, sizeof(activity_page_t));
    }

    if (g_activity_page.main_page.is_notif) {
        g_activity_page.create_frame_func = create_frame;
        g_activity_page.create_data = ptr;
    }

    g_activity_page.main_page.is_notif = activity_page->main_page.is_notif;
}


上面的结构体原型,以及函数实现,只是大体实现了个框架。后面我再一点一点的实现其过程,如何使用!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值