您的位置:首页 > 新闻 > 资讯 > 全媒体广告策划与营销_云南创网科技有限公司_互联网广告推广_市场营销策划书

全媒体广告策划与营销_云南创网科技有限公司_互联网广告推广_市场营销策划书

2024/12/21 20:08:24 来源:https://blog.csdn.net/Lmz_0314/article/details/142868521  浏览:    关键词:全媒体广告策划与营销_云南创网科技有限公司_互联网广告推广_市场营销策划书
全媒体广告策划与营销_云南创网科技有限公司_互联网广告推广_市场营销策划书

文章目录

  • 1 前言
  • 2 项目结构
  • 3 UI控件与指针变量的关联
  • 4 UI文件和Logic.cc的关系
    • 4.1 REGISTER_ACTIVITY_TIMER_TAB[ ] 注册定时器
    • 4.2 void onUI_init() 界面初始化
    • 4.3 void onUI_quit() 界面退出
    • 4.4 void onProtocolDataUpdate(const SProtocolData &data)
    • 4.5 bool onUI_Timer(int id)
    • 4.6 bool onmainActivityTouchEvent(const MotionEvent &ev)
  • 5 总结ftu文件和代码对应的关系
  • 6 控件命名规则
  • 7 控件自动生成的关联函数
    • 7.1 按键控件
    • 7.2 编辑输入框控件
    • 7.3 滑块控件
    • 7.4 滑动窗口控件
    • 7.5 列表控件
  • 8 添加本地库


1 前言

本系列笔记根据flythings官方文档进行学习,连接如下,相关下载在文档中的环境安装部分
https://developer.flythings.cn/zh-hans/

2 项目结构

简单介绍
在这里插入图片描述
ui文件夹中存储ui文件,后缀是.ftu
resources文件夹存储资源文件夹,包括图片字体等
在这里插入图片描述

src 文件夹存储三个部分
activity:最好不要修改,生成ui文件后,会自动生成activity类和logic.cc文件
logic:存放代码逻辑,自定义代码主要添加到Logic.cc文件中
uart:存放串口操作相关的代码,包括读写串口,协议解析等
Main.cpp:一般不做修改

3 UI控件与指针变量的关联

UI生成后,会在自动生成的activity文件中生成静态全局变量,并且include了相对应的.cc文件,所以可以使用这些控件指针
在这里插入图片描述

4 UI文件和Logic.cc的关系

这是自动生成的cc文件中拥有的函数,默认生成的,其他的控件在讲到控件部分再说

/*** 注册定时器* 填充数组用于注册定时器* 注意:id不能重复*/
static S_ACTIVITY_TIMEER REGISTER_ACTIVITY_TIMER_TAB[] = {//{0,  6000}, //定时器id=0, 时间间隔6秒//{1,  1000},
};/*** 当界面构造时触发*/
static void onUI_init(){//Tips :添加 UI初始化的显示代码到这里,如:mText1Ptr->setText("123");}/*** 当切换到该界面时触发*/
static void onUI_intent(const Intent *intentPtr) {if (intentPtr != NULL) {//TODO}
}/** 当界面显示时触发*/
static void onUI_show() {}/** 当界面隐藏时触发*/
static void onUI_hide() {}/** 当界面完全退出时触发*/
static void onUI_quit() {}/*** 串口数据回调接口*/
static void onProtocolDataUpdate(const SProtocolData &data) {}/*** 定时器触发函数* 不建议在此函数中写耗时操作,否则将影响UI刷新* 参数: id*         当前所触发定时器的id,与注册时的id相同* 返回值: true*             继续运行当前定时器*         false*             停止运行当前定时器*/
static bool onUI_Timer(int id){switch (id) {default:break;}return true;
}/*** 有新的触摸事件时触发* 参数:ev*         新的触摸事件* 返回值:true*            表示该触摸事件在此被拦截,系统不再将此触摸事件传递到控件上*         false*            触摸事件将继续传递到控件上*/
static bool onmainActivityTouchEvent(const MotionEvent &ev) {return false;
}

这些函数拥有相应的生命周期,这部分会在后面详细讲,这里简单提一下
在这里插入图片描述
关闭时
在这里插入图片描述
相应API的详解

4.1 REGISTER_ACTIVITY_TIMER_TAB[ ] 注册定时器

/*** 注册定时器* 填充数组用于注册定时器* 注意:id不能重复*/
static S_ACTIVITY_TIMEER REGISTER_ACTIVITY_TIMER_TAB[] = {//{0,  6000}, //定时器id=0, 时间间隔6秒//{1,  1000},
};

S_ACTIVITY_TIMEER 结构体的数据类型如下

typedef struct {int id; // 定时器ID , 不能重复int time; // 定时器  时间间隔  单位 毫秒
}S_ACTIVITY_TIMEER;

4.2 void onUI_init() 界面初始化

/*** 当界面构造时触发*/
static void onUI_init(){//Tips :添加 UI初始化的显示代码到这里,如:mText1Ptr->setText("123");}

用于界面初始化,用于在打开这个UI界面的时候,如果需要初始化一些内容,可以将代买添加到这里

4.3 void onUI_quit() 界面退出

/** 当界面完全退出时触发*/
static void onUI_quit() {}

用于界面退出时,可以将代码添加到这个函数里

4.4 void onProtocolDataUpdate(const SProtocolData &data)

/*** 串口数据回调接口*/
static void onProtocolDataUpdate(const SProtocolData &data) {}

用于接收串口数据。当解析到串口数据帧时,会调用该函数。
实际上,在activity的OnCreate中会进行串口数据的注册,在析构中取消注册。
当串口读到数据时,通过ProtocalParser中的void notifyProtocolDataUpdate(const SProtocolData &data)依次调用已注册的UI界面。

 /*** 解析每一帧数据*/static void procParse(const BYTE *pData, UINT len) {switch (MAKEWORD(pData[3], pData[2])) {case CMDID_POWER:sProtocolData.power = pData[5];break;}// 通知协议数据更新notifyProtocolDataUpdate(sProtocolData);}

4.5 bool onUI_Timer(int id)

/*** 定时器触发函数* 不建议在此函数中写耗时操作,否则将影响UI刷新* 参数: id*         当前所触发定时器的id,与注册时的id相同* 返回值: true*             继续运行当前定时器*         false*             停止运行当前定时器*/
static bool onUI_Timer(int id){switch (id) {default:break;}return true;
}

定时器回调函数,当某个定时器达到规定的时间间隔后,系统将调用该函数,可以通过id参数区分定时器,返回true继续当前计时器,返回false暂停当前计时器

4.6 bool onmainActivityTouchEvent(const MotionEvent &ev)

/*** 有新的触摸事件时触发* 参数:ev*         新的触摸事件* 返回值:true*            表示该触摸事件在此被拦截,系统不再将此触摸事件传递到控件上*         false*            触摸事件将继续传递到控件上*/
static bool onmainActivityTouchEvent(const MotionEvent &ev) {return false;
}

回调函数在对应的activity中注册,返回true就拦截,不再传递到控件上
返回false则表示触摸时间继续传递到控件上

5 总结ftu文件和代码对应的关系

在这里插入图片描述

6 控件命名规则

指针变量名由三部分构成。 分别为固定的小写 m 作为前缀 + ID名 + Ptr 作为结尾
在这里插入图片描述
其他的
在这里插入图片描述
相应ID的宏定义
分别为固定的大写 ID 、大写的UI文件名、控件ID属性名称构成。
在这里插入图片描述

7 控件自动生成的关联函数

生成的关联函数需要自己更改名字
在这里插入图片描述

各个控件生成的函数不同

7.1 按键控件

 static bool onButtonClick_XXXX(ZKButton *pButton) {return false;}

pButton是被点击按键的指针,通过该指针可以对控件进行操作,和mxxxxPtr所指向的对象是同一对象

7.2 编辑输入框控件

static void onEditTextChanged_XXXX(const std::string &text) {}

text是当前输入框中的完整字符串

7.3 滑块控件

static void onProgressChanged_XXXX(ZKSeekBar *pSeekBar, int progress) {}

pSeekbar是滑块控件的指针
progress是当前进度值

7.4 滑动窗口控件

static void onSlideItemClick_XXXX(ZKSlideWindow *pSlideWindow, int index) {}

pslidewindow是滑动窗口控件的指针,
index是被点击图标的索引,如果该滑动窗口添加了10个图标,则索引范围是【0,9】

7.5 列表控件

在这里插入图片描述

列表控件有3个函数

  1. 用于知道列表有多少项
static int getListItemCount_XXXX(const ZKListView *pListView) {return 0;
}

plistview是该指针控件的指针
return 的0是要自己写多少的

2.用于知道每一项显示的哪些内容

static void obtainListItemData_XXXX(ZKListView *pListView,ZKListView::ZKListItem *pListItem, int index) {//pListItem->setText(index)
}

plistview是该指针控件的指针
plistItem是item表项的指针
index是表项再整个列表中的索引值

比如说我有的控件中有3个表项,我点了第二个表项,此时的plistItem指向第二个表项,index为1

3.点击事件函数

static void onListItemClick_XXXX(ZKListView *pListView, int index, int id) {//LOGD(" onListItemClick_ Listview1  !!!\n");
}

plistview是该指针控件的指针
index是被点击的表项在表中的索引值
id是被点击控件的整型id
在这里插入图片描述
这个id用于区分点击的哪一个表项

static void onListItemClick_XXXX(ZKListView *pListView, int index, int id) {//LOGD(" onListItemClick_ Listview1  !!!\n");switch(id) {case ID_MAIN_SubItem1://LOGD("点击了列表第%d项的第一个子项", index);break;case ID_MAIN_SubItem2://LOGD("点击了列表第%d项的第二个子项", index);break;}
}

在这里插入图片描述

8 添加本地库

在这里插入图片描述
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com