现代屏幕其实并不需要屏幕保护,不过屏幕保护程序会衍生一些其它用途。比如:
本文介绍一下在 AWTK 串口屏中,是如何实现屏幕保护的。基本工作原理是这样的:
在这里例子中,模型(也就是数据)里只有一个 screen_saver_time 变量:
变量名 | 数据类型 | 功能说明 |
---|---|---|
screen_saver_time | 整数 | 单位为毫秒 |
screen_saver_time 是 默认模型 中一个内置属性。
从模板创建项目,将 hmi/template_app 拷贝 hmi/screen_saver 即可。
第一个项目最好不要放到其它目录,因为放到其它目录需要修改配置文件中的路径,等熟悉之后再考虑放到其它目录。路径中也不要中文和空格,避免不必要的麻烦。
用 AWStudio 打开上面 screen_saver 目录下的 project.json 文件。里面有一个空的窗口,在上面加入下面的控件:
做出类似下面的界面。
在这个窗口中,我们通过一个定时器来改变窗口的背景颜色,创建一个空白窗口,将其改名为 screen_saver 即可。
绑定属性 | 绑定规则 | 说明 |
---|---|---|
v-data:value | {screen_saver_time} | 变量要用英文大括号括起来。 |
绑定属性 | 绑定规则 | 说明 |
---|---|---|
v-model | default | default 不需要用大括号括起来。 |
绑定属性 | 绑定规则 | 说明 |
---|---|---|
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 模型。
修改资源文件 design/default/data/default_model.json, 将其内容改为:
{
"screen_saver_time": 180000
}
注意:
如果文件内容有中文(非 ASCII 字符),一定要保存为 UTF-8 格式。
重新打包资源才能生效。
为了保存屏保时间,修改资源文件 design/default/data/settings.json, 将其内容改为:
{
"name":"hmi_screen_saver",
"persistent" : {
"screen_saver_time": true
}
}
运行 bin 目录下的 demo 程序,设置屏幕时间为一个较短的值,等待屏保启动。
本项目并没有编写界面相关的代码,AWStudio 在 src/pages 目录下生成了一些代码框架,这些代码并没有用到,可以删除也可以不用管它,但是不能加入编译。
完整示例请参考:demo_screen_saver