TouchGFX界面开发 | 图像控件应用示例

2023-10-25 04:12

本文主要是介绍TouchGFX界面开发 | 图像控件应用示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图像控件应用示例

TouchGFX中的图像会绘制关联图像文件中的像素数据。 使用图像文件前,必须将其导入到项目中。TouchGFX Designer内置了五种类型的图像部件:

  • 固定图像:图像大小是由关联的图像文件定义的,不能在运行时改动。若要将图像显示为不同大小,需调整导入图像的大小
  • 缩放图像:能够绘制缩放版位图的控件。只需更改控件的宽度/高度即可调整图像大小。缩放的质量取决于使用的渲染算法,渲染算法可动态更改
  • 标题图像:显示平铺位图的简单控件。位图可与背景进行 Alpha 混合,并可包含透明区域
  • 动画图像:能够使用一系列共用同一标识符的图像从头至尾运行动画。能够在停止或暂停之前运行一次动画或循环运行动画
  • 纹理映射器:能够绘制转换后的图像,可以自由缩放并围绕可调原点旋转。视角印象也可通过应用虚拟相机来实现,其中视角的数量是可调的

本文以动画图像(animatedImage)为例,介绍TouchGFX图像控件的使用,将实现如下视频中的效果:

本文示例基于于STM32F429IGT6 + RGB (800 * 480)硬件平台,提前移植好了TouchGFX,并添加了触摸驱动。详细可参考 使用STM32CubeMX移植TouchGFX 和 添加触摸屏驱动 这两篇文章的介绍

一、TouchGFX Designer界面布局

打开Keil工程中,TouchGFX文件夹里的TouchGFX Designer软件

  • 添加图片资源

在这里插入图片描述

  • 添加文本资源

在这里插入图片描述

  • 添加背景图片、以及带标签的按钮,选择按钮标签的文本资源

在这里插入图片描述

  • 添加动画图片,给Animated控件指定动态图片的起始图片、以及下一张图片显示时间。注意图片的命名规则

所用图像必须使用标识符,例如img_01.png、img_02.png、img_03.png、img_04.png、img_05.png、img_06.png、img_07.png等

在这里插入图片描述

  • 给button添加交互动作,使按钮被点击时直接执行C++代码,实现动画开关以及切换相应文本
if (animation.isAnimatedImageRunning())
{animation.pauseAnimation(); //暂停动画btnToggle.setLabelText(TypedText(T_TEXTSTART));  //设置button的文本为start
}
else
{animation.startAnimation(animation.isReverse(), false, true); //开始动画btnToggle.setLabelText(TypedText(T_TEXTSTOP));  //设置button文本为stop 
}

在这里插入图片描述

  • 给动画图像添加交互,使动画在结束后直接执行C++代码,实现动画再启动
//animation.isReverse() 判断是否是暂停状态
animation.startAnimation(!animation.isReverse(), false, true);

在这里插入图片描述

  • 点击Generate Code生成TouchGFX代码

二、MKD-ARM Keil中添加用户代码

TouchGFX生成代码后,由于在TouchGFX Designer中添加交互动作时,选择的是直接执行C++代码,并已经输入了代码。因此在Keil中无需再添加代码,要执行的C++代码已经自动嵌入了TouchGFX自动生成的视图基类代码中

如下视图基类代码中,包含了如何创建动画图像,以及交互动作的C++函数

#include <gui_generated/main_screen/MainViewBase.hpp>
#include <touchgfx/Color.hpp>
#include "BitmapDatabase.hpp"
#include <texts/TextKeysAndLanguages.hpp>MainViewBase::MainViewBase() :buttonCallback(this, &MainViewBase::buttonCallbackHandler),animationEndedCallback(this, &MainViewBase::animationEndedCallbackHandler)
{__background.setPosition(0, 0, 800, 480);__background.setColor(touchgfx::Color::getColorFrom24BitRGB(0, 0, 0));background.setBitmap(touchgfx::Bitmap(BITMAP_BG_ID));background.setPosition(0, 0, 800, 480);background.setScalingAlgorithm(touchgfx::ScalableImage::NEAREST_NEIGHBOR);btnToggle.setXY(335, 316);btnToggle.setBitmaps(touchgfx::Bitmap(BITMAP_BTN_ID), touchgfx::Bitmap(BITMAP_BTN_PRESSED_ID));btnToggle.setLabelText(touchgfx::TypedText(T_TEXTSTART));btnToggle.setLabelColor(touchgfx::Color::getColorFrom24BitRGB(255, 0, 0));btnToggle.setLabelColorPressed(touchgfx::Color::getColorFrom24BitRGB(255, 0, 0));btnToggle.setAction(buttonCallback);animation.setXY(321, 118);animation.setBitmaps(BITMAP_ANI_01_ID, BITMAP_ANI_09_ID);animation.setUpdateTicksInterval(2);animation.setDoneAction(animationEndedCallback);add(__background);add(background);add(btnToggle);add(animation);
}void MainViewBase::setupScreen()
{}void MainViewBase::buttonCallbackHandler(const touchgfx::AbstractButton& src)
{if (&src == &btnToggle){//buttonClicked//When btnToggle clicked execute C++ code//Execute C++ codeif(animation.isAnimatedImageRunning()){animation.pauseAnimation();//暂停动画btnToggle.setLabelText(TypedText(T_TEXTSTART));//设置butto的文本为start}else{//开始动画animation.startAnimation(animation.isReverse(), false, true);//设置button文本为stop btnToggle.setLabelText(TypedText(T_TEXTSTOP));}}
}void MainViewBase::animationEndedCallbackHandler(const touchgfx::AnimatedImage& src)
{if (&src == &animation){//animationEnded//When animation animation ended execute C++ code//Execute C++ codeanimation.startAnimation(!animation.isReverse(), false, true);}
}

三、下载测试

编译无误后,下载到开发板中,点击按钮会开始或停止显示动画效果

这篇关于TouchGFX界面开发 | 图像控件应用示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/279944

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl