AWTK 开源串口屏开发(7) - 屏幕保护

news2025/6/3 23:19:28

现代屏幕其实并不需要屏幕保护,不过屏幕保护程序会衍生一些其它用途。比如:

  • 保护隐私。长时间不操作,通过动画或者其它方式隐藏屏幕内容。
  • 数据安全。长时间不操作,需要输入密码才能恢复。
  • 美观/广告。长时间不操作,显示动画或者播放视频广告。

本文介绍一下在 AWTK 串口屏中,是如何实现屏幕保护的。基本工作原理是这样的:

  • 长时间没有用户输入事件,触发屏幕保护事件。
  • 在屏幕保护事件中,打开名为 screen_saver 的窗口。
  • screen_saver 窗口中,显示屏保内容,如果收到输入事件,关闭该窗口(或要求输入密码)。

1. 功能

在这里例子中,模型(也就是数据)里只有一个 screen_saver_time 变量:

变量名数据类型功能说明
screen_saver_time整数单位为毫秒

screen_saver_time 是 默认模型 中一个内置属性。

2. 创建项目

从模板创建项目,将 hmi/template_app 拷贝 hmi/screen_saver 即可。

第一个项目最好不要放到其它目录,因为放到其它目录需要修改配置文件中的路径,等熟悉之后再考虑放到其它目录。路径中也不要中文和空格,避免不必要的麻烦。

3. 制作界面

3.1 主窗口

用 AWStudio 打开上面 screen_saver 目录下的 project.json 文件。里面有一个空的窗口,在上面加入下面的控件:

  • 静态文本
  • 编辑器

做出类似下面的界面。

在这里插入图片描述

3.2 屏保窗口

在这个窗口中,我们通过一个定时器来改变窗口的背景颜色,创建一个空白窗口,将其改名为 screen_saver 即可。

4. 添加绑定规则

4.1 主窗口

  • 编辑器 绑定到 screen_saver_time 变量。添加自定义的属性 v-data:value,将值设置为 {screen_saver_time}
绑定属性绑定规则说明
v-data:value{screen_saver_time}变量要用英文大括号括起来。
  • 同样指定窗口的模型为 default。
绑定属性绑定规则说明
v-modeldefaultdefault 不需要用大括号括起来。

4.2 屏保窗口

  • 启动 按钮的 点击 事件启动定时器。
绑定属性绑定规则说明
v-on:window_open{fscript, Args=start_timer(3000);set(计数,0)}启动定时器
v-on:timer{fscript, Args=set(计数,计数+1)}增加计数
v-data:style:normal:bg_color{one_of(‘red;blue;green;gold;orange;white;black’, 计数%7)}根据计数改变背景颜色
v-on:pointer_move{nothing, CloseWindow=true}关闭窗口
v-on:pointer_up{nothing, CloseWindow=true}关闭窗口
v-on:key_up{nothing, CloseWindow=true}关闭窗口

这里只是用了一个窗口内局部的变量“计数”,不需要指定模型,系统会自动创建一个 dummy 模型。

4. 初始化数据

修改资源文件 design/default/data/default_model.json, 将其内容改为:

{
  "screen_saver_time": 180000
}

注意:

  • 如果文件内容有中文(非 ASCII 字符),一定要保存为 UTF-8 格式。

  • 重新打包资源才能生效。

5. 数据持久化

为了保存屏保时间,修改资源文件 design/default/data/settings.json, 将其内容改为:

{
    "name":"hmi_screen_saver",
    "persistent" : {
      "screen_saver_time": true
    }
}

6. 编译运行

运行 bin 目录下的 demo 程序,设置屏幕时间为一个较短的值,等待屏保启动。

在这里插入图片描述

7. 注意

  • 本项目并没有编写界面相关的代码,AWStudio 在 src/pages 目录下生成了一些代码框架,这些代码并没有用到,可以删除也可以不用管它,但是不能加入编译。

  • 完整示例请参考:demo_screen_saver

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1401312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CMeet系列技术生态沙龙---城市开发者组织年度聚会·杭州 《把握未来趋势,持续学习创新》

CSDN始终致力于促进城市区域内尖端新兴技术开发者交流,提供开放自由的切磋平台。在这个充满挑战和机遇的一年即将结束之际,通过本次聚会,汇聚杭州本地各行各业的开发者朋友,回顾过去一年城市社区的成就和收获,感谢携手同行的各位,…

Spring中动态注册和销毁对象

1. 使用说明 通常我们项目中想要往spring容器中注入一个bean可以在项目初始化的时候结合Bean注解实现。但是该方法适合项目初始化时候使用,如果后续想要继续注入对象则无可奈何。本文主要描述一种在后续往spring容器注入bean的方法。 2. 实现 2.1 说明 2.1.1 注册…

记一次多平台免杀PHP木马的制作过程

注意:本文转载自本作者稀土掘金博客 博客地址: 御坂19008号 的个人主页 - 动态 - 掘金 文章目录 前言声明绕过情况使用方法运行环境绕过点介绍技术原理讲解变量传值覆盖模块代码执行阻断模块InazumaPuzzle程序锁定器PerlinNoise危险函数生成与执行类构造…

小样本跨域(cross-domain)系列工作(超级详细)

小样本跨域(cross-domain)系列工作 本文记录近期阅读过的小样本跨域相关论文,每一篇文章都经过了自己的深入思考和总结,按照:解决什么问题、动机、方法、数据集、结论和启发的顺序进行总结,同时会有部分细…

algotithm -- 排序算法

排序算法总结表: 1. In-place 和 Out-place 含义 参考链接 in-place 占用常数内存,不占用额外内存 假如问题规模是n,在解决问题过程中,只开辟了常数量的空间,与n无关,这是原址操作,就是In-…

谷歌浏览器通过network模拟HTTP中的GET/POST请求获取response

1、F12打开network选中需要模拟的方法Copy->Copy as fetch 2、通过AI帮你进行转换一下调用格式 原代码 fetch("https://mp.amap.com/api/forward/aggregate?mtop.alsc.kbt.intergration.toolkit.call.queryCallBlockInfo", {"headers": {"acce…

Grafana(三)Grafana 免密登录-隐藏导航栏-主题变换

一. 免密登录 Grafana 的常用方式: 将配置好的Grafana图嵌入到系统页面中 为了实现可免登录访问,可以通过如下方式进行设置: 1. 修改Grafana配置文件 在Grafana的配置文件 /etc/grafana/grafana.ini 中,找到 [auth.anonymous] 配…

HarmonyOS开源软件Notice收集策略说明

开源软件Notice是与项目开源相关的文件,收集这些文件的目的是为了符合开源的规范。 收集目标 只收集打包到镜像里面的模块对应的License;不打包的都不收集,比如构建过程使用的工具(如clang、python、ninja等)都是不收…

如何进行正确的 CodeReview

软件开发生命周期中至关重要的一步是代码审查。它使开发人员能够显著提升代码质量。它类似于书籍的创作过程。首先,作者写故事,然后经过编辑以确保不会出现诸如混淆“you’re”和“yours”之类的错误。在这个语境中,代码审查指的是检查和评估…

云原生架构体系和重点概念解读

【摘要】大部分人对云原生的认识仅限于容器、微服务、DevOps等内容,把容器、微服务、 DevOps就等同于云原生,这显然是不对的。本文梳理了云原生架构体系内容并对重点概念进行了解读,希望对读者有所帮助。 云原生(Cloud-Native&am…

八股文学习日常第一期(20240121)

零、前言 1、目的 帮助掌握面试题,就八股文相关内容展开进行学习和整理,也方便之后的复习和巩固。 2、八股文内容来源 ①https://blog.csdn.net/w20001118/article/details/125724647 一、具体内容分析 1、类的完整书写方式 1.1、类 [Access Mod…

java面试题——多线程01

1.java中线程的实现方式? 常见的一般是4种: 继承Thread类实现Runnable接口通过callable接口,实现有返回值的线程基于线程池的实现 虽说有四种,但究其根本,其实都是实现的Runnable接口 2.java中线程的状态?…

机器学习周报第29周

目录 摘要Abstract一、文献阅读1.论文标题2.论文摘要3.论文背景4.论文方案4.1 多视角自注意力网络4.2 距离感知4.3 方向信息4.4 短语模式 二、self-attention 摘要 本周学习了多视角自注意力网络,在统一的框架下联合学习输入句子的不同语言学方面。具体来说&#x…

高中电学实验4

欧姆表中值电阻为内阻。 满偏电阻e/满偏电流 量程变小,就是满偏电阻变小。 如果量程变为10分之1,满偏电阻变为10分之1。 电动势不变,干路电流变为原来的10倍。 就是分流的电流为量程的9倍。

【现代密码学基础】详解完美安全与不可区分安全

目录 一. 介绍 二. 不可区分性试验 三. 不可区分性与完美安全 四. 例题 五. 小结 一. 介绍 敌手完美不可区分,英文写做perfect adversarial indistinguishability,其中adversarial经常被省略不写,在密码学的论文中经常被简称为IND安全。…

已解决java.lang.ClassNotFoundException——java连接mysql8/mysql5

1.准备工作 1.mysql8下载安装 这里大家没必要去mysql官网安装,可以直接安装phpStudy_pro,毕竟小皮面板的宣言是让天下没有难配的服务器环境,如下是小皮面板的界面(同样的,此次用到的所有资料文末公众号可免费领取)&a…

零食折扣店,注定昙花一现?

年终岁末,又到了各类休闲零食产品一年一度的销售旺季。与过去不同的是,近年来的休闲零食赛道正因大量零食折扣店的涌现而显得热闹非凡。 随着主打折扣、低价的零食折扣店成为消费者特别是三四线下沉市场消费者的新宠,资本开始涌入并快速推动…

循序渐进学 JavaScript <二>

续 <一> 九、JavaScript常见内置类 9.1 原始类型的包装类 基本数据类型也可以调用属性 在理论上来说它们是没有办法获取属性或者调用方法的 原始类型是简单的值&#xff0c;默认并不能调用属性和方法js 为了可以使其获取属性和调用方法&#xff0c;对其封装了对应的包装…

【Java】Maven的基本使用

Maven的基本使用 Maven常用命令 complie&#xff1a;编译clean&#xff1a;清理test&#xff1a;测试package&#xff1a;打包install&#xff1a;安装 mvn complie mvn clean mvn test mvn package mvn installMaven生命周期 IDEA配置Maven Maven坐标 什么是坐标&#xff1f;…

有关Quick BI中当返回值为空值,行标题消失问题

一、Quick BI中的lod_ include函数 lod_ include {维度1[,维度2]...:聚合表达式[:过滤条件]} 作用&#xff1a;将表达式中的维度一起作为分组依据进行订算。其中&#xff0c; 1) 维度1[,维度2]... &#xff1a;声明维度&#xff0c;指定聚合表达式要连接到的一个或多个维…