一、效果展示

仪表是一种小部件,能够绘制指示指定范围内给定值的指针和圆弧。主要有两部分指针和表盘。

touchGFX控件学习一 Gauage仪表控件_算法

二、制作素材

主要是一些图片,大家另存为保存一下就行

touchGFX控件学习一 Gauage仪表控件_学习_02


touchGFX控件学习一 Gauage仪表控件_控件_03


touchGFX控件学习一 Gauage仪表控件_学习_04


touchGFX控件学习一 Gauage仪表控件_c++_05


touchGFX控件学习一 Gauage仪表控件_控件_06


touchGFX控件学习一 Gauage仪表控件_算法_07


touchGFX控件学习一 Gauage仪表控件_控件_08

三、touchGFX创建工程

1、桌面放置box控件,修改背景

touchGFX控件学习一 Gauage仪表控件_控件_09

2、添加图片

将需要的控件添加进来

touchGFX控件学习一 Gauage仪表控件_ico_10

2、添加控件

添加三个控件如图所示

touchGFX控件学习一 Gauage仪表控件_ico_11


对三个控件进行设置

icon控件

touchGFX控件学习一 Gauage仪表控件_算法_12


gauge控件

touchGFX控件学习一 Gauage仪表控件_c++_13

3、添加interaactions

touchGFX控件学习一 Gauage仪表控件_控件_14

4、添加生成工程

touchGFX控件学习一 Gauage仪表控件_控件_15

四、修改源码让指针动起来

1、找到Screen1View.hpp文件添加​​virtual void handleTickEvent();​​函数

touchGFX控件学习一 Gauage仪表控件_学习_16

2、找到Screen1View.cpp文件实现​​virtual void handleTickEvent();​​函数,在这个函数中更新控件的值,实现指针运动

touchGFX控件学习一 Gauage仪表控件_c++_17

#include "rtthread.h"
void Screen1View::handleTickEvent()
{
static int incr = 1;
static int timeoutCounter = 0;


// Only update at a certain time interval (measured in ticks)
if (timeoutCounter++ == 20)
{
timeoutCounter = 0;

if (gauge.getValue() <= 0)
{
incr = +1;
}
else if (gauge.getValue() >= 100)
{
incr = -1;
}

// Use updateValue instead of setValue to have
// the needle animate to the new value instead
// of instantly move to the position.
gauge.updateValue(gauge.getValue() + incr, 20);
}


}

3、根据值不同更改icon控件图片

#include "rtthread.h"
void Screen1View::handleTickEvent()
{
static int incr = 1;
static int timeoutCounter = 0;


// Only update at a certain time interval (measured in ticks)
if (timeoutCounter++ >= 10)
{
timeoutCounter = 0;

if (gauge.getValue() <= 0)
{
incr = +1;
}
else if (gauge.getValue() >= 100)
{
incr = -1;
}

// Use updateValue instead of setValue to have
// the needle animate to the new value instead
// of instantly move to the position.
gauge.updateValue(gauge.getValue() + incr, 20);


int gauageVal = gauge.getValue();
rt_kprintf("gauage = %d\r\n",gauageVal);

if (gauageVal < 15)
{
icon.setBitmap(Bitmap(BITMAP_GAUGE02_ICON_LEVEL00_ID));
}
else if (gauageVal < 50)
{
icon.setBitmap(Bitmap(BITMAP_GAUGE02_ICON_LEVEL01_ID));
}
else if (gauageVal < 67)
{
icon.setBitmap(Bitmap(BITMAP_GAUGE02_ICON_LEVEL02_ID));
}
else if (gauageVal < 83)
{
icon.setBitmap(Bitmap(BITMAP_GAUGE02_ICON_LEVEL03_ID));
}
else
{
icon.setBitmap(Bitmap(BITMAP_GAUGE02_ICON_LEVEL04_ID));
}
icon.invalidate();



}


}

记得不要忘了​​icon.invalidate();​​调用这个函数哦!