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

news/2024/7/10 20:12:51 标签: AWTK, 串口屏, 开源, 单片机, 嵌入式硬件

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

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

本文介绍一下在 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.niftyadmin.cn/n/5340032.html

相关文章

Debian11下编译ADAravis和Motor模块的一条龙过程

Debian11编译EPICS ADAravis记录 一年前整理的上面文,这几天重新走了一遍,有些地方会碰到问题,需要补充些环节,motor模块以前和areaDetector一条龙编译时,总是有问题,当时就没尝试了,这几天尝试…

HBase学习八: 核心参数配置

参数配置是一个富有技巧性的工作,每个参数的背后都隐藏着对应模块的工作原理,如果不清楚这些工作原理,就没办法真正理解这些参数的核心意义。 1、Region相关参数 hbase.hregion.max.f ilesize:默认为10G,简单理解为,Region中最大的Store中所有文件大小一旦大于该值整个…

2024年华为OD机试真题-螺旋数字矩阵-Python-OD统一考试(C卷)

题目描述: 疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法: 给出数字个数n和行数m(0 < n ≤ 999,0 < m ≤ 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3...n,最终形成一个m行矩阵。 小明对这个矩阵有些要求: 1.每行数字的…

孪生素数猜想:无穷的奥秘

目录 孪生素数猜想的数学表述孪生素数的性质寻找孪生素数的Python代码孪生素数猜想的研究进展 素数&#xff0c;自然数中仅有1和自身两个正因数的数&#xff0c;自古以来就吸引了无数数学家的注意。在素数的研究中&#xff0c;孪生素数猜想是一个特别引人注目的话题。孪生素数是…

JavaEE学习笔记 2024-1-18 --模块化Controller层、AJAX与JSON

上一篇 个人整理非商业用途&#xff0c;欢迎探讨与指正&#xff01;&#xff01; 文章目录 11.模块化Controller层12.AJAX12.1使用场景 13.JSON13.1如何使用后端发送JSON数据 11.模块化Controller层 将对应模块的Servlet写入到一个指定的模块中,模块化编程 使用switch方式 p…

ceph资源池pool管理

之前我们已经完成了 Ceph 集群的部署&#xff0c;但是我们如何向 Ceph 中存储数据呢&#xff1f; 首先我们需要在 Ceph 中定义一个 Pool 资源池。 Pool 是 Ceph 中存储 Object 对象抽象概念。 我们可以将其理解为 Ceph 存储上划分的逻辑分区&#xff0c;Pool 由多个 PG 组成&…

如何判断两个链表相等

要判断两个链表是否相等&#xff0c;需要比较它们的节点值以及节点的顺序。下面是一种常见的方法来判断两个链表是否相等&#xff1a; 首先&#xff0c;判断两个链表的长度是否相等。如果长度不相等&#xff0c;则链表肯定不相等。然后&#xff0c;逐个比较两个链表对应位置的…

【Docker】在centos中安装nginx

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是平顶山大师&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《【Docker】安装nginx》。&#x1f3af;&#…