Flythings学习(一)基础

文章目录

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

cpp 复制代码
/**
 * 注册定时器
 * 填充数组用于注册定时器
 * 注意: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[ ] 注册定时器

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

S_ACTIVITY_TIMEER 结构体的数据类型如下

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

4.2 void onUI_init() 界面初始化

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

}

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

4.3 void onUI_quit() 界面退出

cpp 复制代码
/*
 * 当界面完全退出时触发
 */
static void onUI_quit() {

}

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

4.4 void onProtocolDataUpdate(const SProtocolData &data)

cpp 复制代码
/**
 * 串口数据回调接口
 */
static void onProtocolDataUpdate(const SProtocolData &data) {

}

用于接收串口数据。当解析到串口数据帧时,会调用该函数。

实际上,在activity的OnCreate中会进行串口数据的注册,在析构中取消注册。

当串口读到数据时,通过ProtocalParser中的void notifyProtocolDataUpdate(const SProtocolData &data)依次调用已注册的UI界面。

cpp 复制代码
 /**
   * 解析每一帧数据
   */
  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)

cpp 复制代码
/**
 * 定时器触发函数
 * 不建议在此函数中写耗时操作,否则将影响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)

cpp 复制代码
/**
 * 有新的触摸事件时触发
 * 参数: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 按键控件

cpp 复制代码
 static bool onButtonClick_XXXX(ZKButton *pButton) {
    return false;
 }

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

7.2 编辑输入框控件

cpp 复制代码
static void onEditTextChanged_XXXX(const std::string &text) {

}

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

7.3 滑块控件

cpp 复制代码
static void onProgressChanged_XXXX(ZKSeekBar *pSeekBar, int progress) {

}

pSeekbar是滑块控件的指针

progress是当前进度值

7.4 滑动窗口控件

cpp 复制代码
static void onSlideItemClick_XXXX(ZKSlideWindow *pSlideWindow, int index) {

}

pslidewindow是滑动窗口控件的指针,

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

7.5 列表控件

列表控件有3个函数

  1. 用于知道列表有多少项
cpp 复制代码
static int getListItemCount_XXXX(const ZKListView *pListView) {

    return 0;
}

plistview是该指针控件的指针

return 的0是要自己写多少的

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

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

plistview是该指针控件的指针

plistItem是item表项的指针

index是表项再整个列表中的索引值

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

3.点击事件函数

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

plistview是该指针控件的指针

index是被点击的表项在表中的索引值

id是被点击控件的整型id

这个id用于区分点击的哪一个表项

cpp 复制代码
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 添加本地库


相关推荐
虾球xz44 分钟前
游戏引擎学习第55天
学习·游戏引擎
oneouto1 小时前
selenium学习笔记(二)
笔记·学习·selenium
sealaugh321 小时前
aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
笔记·学习·aws
炭烤玛卡巴卡2 小时前
学习postman工具使用
学习·测试工具·postman
thesky1234562 小时前
活着就好20241224
学习·算法
蜗牛hb2 小时前
VMware Workstation虚拟机网络模式
开发语言·学习·php
汤姆和杰瑞在瑞士吃糯米粑粑2 小时前
【C++学习篇】AVL树
开发语言·c++·学习
虾球xz3 小时前
游戏引擎学习第58天
学习·游戏引擎
奶香臭豆腐3 小时前
C++ —— 模板类具体化
开发语言·c++·学习
波音彬要多做4 小时前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法