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 添加本地库


相关推荐
冷心笑看丽美人11 分钟前
Spring 框架七大模块(Java EE 学习笔记03)
学习·spring·架构·java-ee
huaqianzkh25 分钟前
学习C#中的BackgroundWorker 组件
开发语言·学习·c#
今天我又学废了1 小时前
Scala学习记录,Array
学习
今天我又学废了1 小时前
Scala学习记录,字符串
学习
不要影响我叠Q1 小时前
《软件工程-北京大学》 学习笔记
笔记·学习
谁在夜里看海.1 小时前
【从零开始的算法学习日记✨优选算法篇✨】第二章:流动之窗,探索算法的优雅之道
c++·学习·算法
Chef_Chen1 小时前
从0开始学习机器学习--Day32--推荐系统作业
人工智能·学习·机器学习
前端熊猫1 小时前
transform学习
前端·学习·html
Code哈哈笑2 小时前
【Java 学习】初识类和对象、this引用
java·学习·microsoft