214|6

166

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【STM32H7S78-DK测评】3.转轮动效菜单的实现 [复制链接]

本帖最后由 电子烂人 于 2025-1-15 14:06 编辑

1.前言

之前的帖子已经实现了基础的TOUCHGFX效果,我们要在这个基础上加上菜单的动效

ST提供了很多小控件,不过还不足以实现我们的效果,这篇文章在原有的基础上试着添加一些定制的转轮控件

2.工程建立

打开之前的TOUCHGFX工程:

在CONTAINERS里添加一个小控件,同时摆放好图标和文字的样式,记录下各个元素的坐标

 另外,放一些要用的元素进工程

  

记得设置下要用到的字体,这边屏幕比较大,选用宋体,45磅:

 

把控件里的文字也设置好:

 

回到我们的菜单页面,放置一个scrollwheel转动菜单控件

并在Item Template选择做好的Container,这边设置元素多少,列表外观,以及选择循环模式

  

在转盘的中央放置一个透明按钮,表示我们按下这个区域

  到这里就基本设置完成,生成工程,开始代码端的操作。

3.代码修改

主要流程为:显示转轮效果--->绑定图标和文字--->确认转轮当前所选--->按键进入对应函数--->跳转屏幕

全部代码为C++编译,只展示部分核心内容,.HPP自行修改。这部分代码有参考@NATHAN_XI 同学的代码,在此表示感谢。

mainMenuView.CPP

#include <gui/mainmenu_screen/mainMenuView.hpp>
#include <texts/TextKeysAndLanguages.hpp>
#include <BitmapDatabase.hpp>

mainMenuView::mainMenuView():
scrollWheel1_ItemSelectedCallback(this, &mainMenuView::scrollWheel1_ItemSelectedHandler)
{

}

void mainMenuView::setupScreen()
{
	scrollWheel1.setItemSelectedCallback(scrollWheel1_ItemSelectedCallback);
    mainMenuViewBase::setupScreen();
}

void mainMenuView::tearDownScreen()
{
    mainMenuViewBase::tearDownScreen();
}

void mainMenuView::scrollWheel1UpdateItem(CustomContainer1& item, int16_t itemIndex)
{
	item.setListElements(itemIndex);
}

void mainMenuView::scrollWheel1_ItemSelectedHandler(int16_t itemSelected)
{
	presenter->menuSelected(itemSelected);
}

model.cpp

#include <gui/model/Model.hpp>
#include <gui/model/ModelListener.hpp>

Model::Model() : modelListener(0)
{

}

void Model::tick()
{

}

void Model::SetmenuSelected(int itemSelected)
{
	Screen1Scroll1WheelItemSele = itemSelected;
}

int Model::GetScreenMainMenuScroll1WheelItem(void)
{
	return Screen1Scroll1WheelItemSele;
}

CustomContainer1.CPP

#include <gui/containers/CustomContainer1.hpp>
#include <texts/TextKeysAndLanguages.hpp>
#include <BitmapDatabase.hpp>
#include <gui_generated/containers/CustomContainer1Base.hpp>
#include <math.h>

CustomContainer1::CustomContainer1()
{

}

void CustomContainer1::initialize()
{
    CustomContainer1Base::initialize();
}

void CustomContainer1::offset(int16_t x)
{
    image1.setX(10 + x);
    textArea1.setX(110 + x);
}

void CustomContainer1::alphaAdjust(int16_t a)
{
	image1.setAlpha(a);
	textArea1.setAlpha(a);
}

4.成果展示

WeChat_20250114171933

 

后记

部分参考来源:

使用TouchGFX开发STM32界面应用之入门篇(四)-- 定制控件-1 - 简书

使用TouchGFX开发STM32界面应用之入门篇(四)-- 定制控件-2 - 简书

WIKI:https://support.touchgfx.com/academy/tutorials/tutorial-04

再次感谢@NATHAN_XI同学的讲解,这部分自己摸索真的很痛苦

NATHAN_XI的动态 - 哔哩哔哩

此帖出自stm32/stm8论坛

最新回复

之前我们就跑过这个例程,后面改成了圆形菜单,那会可有成就感了。   详情 回复 发表于 2025-1-16 16:51
点赞(1) 关注
个人签名

没用比没有强

 

回复
举报

163

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

这个生成后能看到才需要的资源是多少吗?  

此帖出自stm32/stm8论坛

点评

是说占用多少FLASH存储吗?要生成之后编译才能看到 不过我感觉用的不多,图片和视频才是最占存储的,可以看这个TouchGFX_01. 节省Flash存储器内存_哔哩哔哩_bilibili  详情 回复 发表于 2025-1-15 09:16
 
 

回复

194

帖子

4

TA的资源

纯净的硅(初级)

板凳
 

真流畅啊

此帖出自stm32/stm8论坛
 
 

回复

166

帖子

1

TA的资源

一粒金砂(高级)

4
 
qzc飘曳 发表于 2025-1-14 22:15 这个生成后能看到才需要的资源是多少吗?  

是说占用多少FLASH存储吗?要生成之后编译才能看到

不过我感觉用的不多,图片和视频才是最占存储的,可以看这个TouchGFX_01. 节省Flash存储器内存_哔哩哔哩_bilibili

此帖出自stm32/stm8论坛

点评

是的,还是TouchGFX的动画和界面看着舒服~  详情 回复 发表于 2025-1-15 11:29
 
个人签名

没用比没有强

 
 

回复

294

帖子

0

TA的资源

一粒金砂(高级)

5
 

TGFX真的是高端,但是比较占用内存,和芯片资源,不过还不错,至少画面是好看

此帖出自stm32/stm8论坛
 
 
 

回复

182

帖子

1

TA的资源

一粒金砂(高级)

6
 
电子烂人 发表于 2025-1-15 09:16 是说占用多少FLASH存储吗?要生成之后编译才能看到 不过我感觉用的不多,图片和视频才是最占存储的, ...

是的,还是TouchGFX的动画和界面看着舒服~

此帖出自stm32/stm8论坛
 
 
 

回复

7244

帖子

2

TA的资源

版主

7
 

之前我们就跑过这个例程,后面改成了圆形菜单,那会可有成就感了。

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表