Redian新闻
>
用 XML 和 Java 构建树莓派打印机的用户界面 | Linux 中国

用 XML 和 Java 构建树莓派打印机的用户界面 | Linux 中国

科技
 
导读:使用 TotalCross 来快速构建嵌入式系统程序的用户界面。                       
本文字数:6070,阅读时长大约:7分钟

LCTT 译者 :CoWave Fall
🌟
翻译: 1.0 篇
|
贡献: 1 天
2022-05-20
2022-05-20
https://linux.cn/lctt/CoWave-Fall

从头开始构建 GUI 是一个非常耗时的过程,以硬编码的方式处理所有的位置和对齐对于一些程序员来说确实很困难。所以在本文中,我将演示如何使用 XML 加快这一过程。

本项目使用 TotalCross🔗 opensource.com 作为目标框架。TotalCross 是一个开源的跨平台软件开发工具包(SDK),旨在更快地为嵌入式设备创建 GUI。TotalCross 无需在设备上运行 Java 即可提供 Java 的开发优势,因为它使用自己的字节码和虚拟机(TC 字节码(TC bytecode) 和 TCVM)来增强性能。

我还使用了 Knowcode-XML,这是一个用于 TotalCross 框架的开源 XML 解析器,它可以将 XML 文件转换为 TotalCross 组件。

项目需求

要重现此项目,你需要:

◈ KnowCode-XML🔗 github.com
◈ VSCode🔗 code.visualstudio.com 或 VSCodium🔗 opensource.com
◈ 一个 Android 开发环境🔗 developer.android.com
◈ 用于 VSCode 的 TotalCross 插件🔗 marketplace.visualstudio.com
◈ 适用于你的开发平台(Linux🔗 opensource.comMac🔗 opensource.com 或 Windows🔗 adoptopenjdk.net)的 Java,需要 Java 11(或更高版本)
◈ Git🔗 opensource.com

制作嵌入式应用程序

该应用程序由一个具有扫描、打印和复印等基本打印功能的嵌入式 GUI 组成。

打印机初始化画面

构建这个 GUI 需要几个步骤,包括使用 Android-XML 生成 GUI,然后使用 Knowcode-XML 解析器在 TotalCross 框架上运行它。

1、生成 Android XML

要创建 XML 文件,首先构建一个简单的 Android 屏幕,然后对其进行自定义。如果你不知道如何编写 Android-XML,或者你只是想简单尝试一下,你可以从这个 GitHub 项目🔗 github.com 中下载这个应用程序的 XML。该项目还包含渲染 GUI 要用到的图片。

2、调整 XML

生成 XML 文件后,你需要进行一些微调以确保所有内容都已经对齐、比例正确并且图像的路径正确。

将 XML 布局添加到 Layouts 文件夹,将所有资源添加到 Drawable 文件夹。然后你就可以开始自定义 XML 了。

例如,如果想要更改 XML 对象的背景,可以更改 android:background 属性:

  1. android:background="@drawable/scan"

你也可以使用 tools:layout_editor_absoluteX 和 tools:layout_editor_absoluteY 更改对象的位置:

  1. tools:layout_editor_absoluteX="830dp"
  2. tools:layout_editor_absoluteY="511dp"

或者使用 android:layout_width 和 android:layout_height 更改对象的大小:

  1. android:layout_width="70dp"
  2. android:layout_height="70dp"

如果要在对象上放置文本,可以使用 android:textSizeandroid:textandroid:textStyle 和 android:textColor

  1. android:textStyle="bold"
  2. android:textColor="#000000"
  3. android:textSize="20dp"
  4. android:text="2:45PM"

下面是一个完整的 XML 对象的示例:

  1. <ImageButton
  2. android:id="@+id/ImageButton"
  3. android:layout_width="70dp"
  4. android:layout_height="70dp"
  5. tools:layout_editor_absoluteX="830dp"
  6. tools:layout_editor_absoluteY="511dp"
  7. android:background="@drawable/home_config" />

3、在 TotalCross 上运行 GUI

完成所有 XML 调整后,就可以在 TotalCross 上运行它了。在 TotalCross 扩展(LCTT 译注:在 VSCode 里面)上创建一个新项目,并将 XML 和 Drawable 文件夹添加到 Main 文件夹里。如果你仍然不确定如何创建 TotalCross 项目,请参阅我们的 入门指南🔗 totalcross.com

配置好环境后,使用 totalcross.knowcode.parse.XmlContainerFactory 和 import totalcross.knowcode.parse.XmlContainerLayout 在 TotalCross 框架上使用 XML GUI。你可以在其 GitHub 页面🔗 github.com 上找到更多关于使用 KnowCode-XML 的信息。

4、添加过渡效果

这个项目的平滑过渡效果是由 SlidingNavigator 类创建的,它使用 TotalCross 的 ControlAnimation 类从一个屏幕滑到另一个屏幕。

在 XMLpresenter 类上调用 SlidingNavigator

  1. new SlidingNavigator(this).present(HomePresenter.class);

在 SlidingNavigator 类上实现 present 函数:

  1. public void present(Class<? extends XMLPresenter> presenterClass)
  2. throws InstantiationException, IllegalAccessException {
  3. final XMLPresenter presenter = cache.containsKey(presenterClass) ? cache.get(presenterClass)
  4. : presenterClass.newInstance();
  5. if (!cache.containsKey(presenterClass)) {
  6. cache.put(presenterClass, presenter);
  7. }
  8. if (presenters.isEmpty()) {
  9. window.add(presenter.content, LEFT, TOP, FILL, FILL);
  10. } else {
  11. XMLPresenter previous = presenters.lastElement();
  12. window.add(presenter.content, AFTER, TOP, SCREENSIZE, SCREENSIZE, previous.content);

使用动画控件中的 PathAnimation 来创建从一个屏幕到另一个屏幕的滑动动画:

  1. PathAnimation.create(previous.content, -Settings.screenWidth, 0, new ControlAnimation.AnimationFinished() {
  2. @Override
  3. public void onAnimationFinished(ControlAnimation anim) {
  4. window.remove(previous.content);
  5. }
  6. }, 1000).with(PathAnimation.create(presenter.content, 0, 0, new ControlAnimation.AnimationFinished() {
  7. @Override
  8. public void onAnimation Finished(Control Animation anim) {
  9. presenter.content.setRect(LEFT, TOP, FILL, FILL);
  10. }
  11. }, 1000)).start();
  12. }
  13. presenter.setNavigator(this);
  14. presenters.push(presenter);
  15. presenter.bind2();
  16. if (presenter.isFirstPresent) {
  17. presenter.onPresent();
  18. presenter.isFirstPresent = false;
  19. }

5、加载环形进度条

打印机应用程序的另一个不错的功能是显示进度的加载屏幕动画。它包括文本和旋转动画。

加载环形进度条

通过添加定时器和定时器监听器来更新进度标签,然后调用函数 spinner.start() 来实现此功能。所有的动画都是由 TotalCross 和 KnowCode 自动生成的:

  1. public void startSpinner() {
  2. time = content.addTimer(500);
  3. content.addTimerListener((e) -> {
  4. try {
  5. progress(); // Updates the Label
  6. } catch (InstantiationException | IllegalAccessException e1) {
  7. // TODO Auto-generated catch block
  8. e1.printStackTrace();
  9. }
  10. });
  11. Spinner spinner = (Spinner) ((XmlContainerLayout) content).getControlByID("@+id/spinner");
  12. spinner.start();
  13. }

这里的环形进度条被实例化为对 XML 文件中描述的 XmlContainerLayout spinner 的引用:

  1. <ProgressBar
  2. android:id="@+id/spinner"
  3. android:layout_width="362dp"
  4. android:layout_height="358dp"
  5. tools:layout_editor_absoluteX="296dp"
  6. tools:layout_editor_absoluteY="198dp"
  7. android:indeterminateTint="#2B05C7"
  8. style="?android:attr/progressBarStyle" />

6、构建应用程序

是时候构建应用程序了。你可以在 pom.xml 中查看和更改目标系统(target systems)。请确保 Linux Arm 目标可用。

如果你使用的是 VSCode,请按下键盘上的 F1 键,选择 TotalCross: Package 并等待完成。然后就可以在 Target 文件夹中看到安装文件了。

7、在树莓派上部署和运行应用程序

要使用 SSH 协议在 树莓派🔗 www.raspberrypi.org 上部署应用程序,请按键盘上的 F1。选择 TotalCross: Deploy&Run 并提供有关你的 SSH 连接的信息,如:用户名、IP地址、密码和应用程序路径。

TotalCross:部署与运行

配置 SSH 用户名

配置 IP 地址

输入密码

配置路径

总结

KnowCode 让使用 Java 创建和管理应用程序屏幕变得更加容易。Knowcode-XML 将你的 XML 转换为 TotalCross GUI 界面,然后生成二进制文件以在你的树莓派上运行。

将 KnowCode 技术与 TotalCross 相结合,使你能够更快地创建嵌入式应用程序。你可以访问我们在 GitHub 上的 嵌入式示例🔗 github.com 并编辑你自己的应用程序,了解你还可以做什么。

如果你有问题、需要帮助,或者只是想与其他嵌入式 GUI 开发人员互动,请随时加入我们的 Telegram🔗 t.me 小组,讨论任何框架上的嵌入式应用程序。


via: https://opensource.com/article/21/3/raspberry-pi-totalcross

作者:Edson Holanda Teixeira Junior 选题:lujun9972 译者:CoWave-Fall 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
[掌设] 最最折腾的开源掌机,GPI CASE2 +树莓派CM4 8GB WIFI合体我如何在 Linux 上扫描家庭照片 | Linux 中国忆秦娥: 飞扬柳絮飘如雪Archinstall 新的菜单系统让安装 Arch Linux 更容易了 | Linux 中国520专场|儿童节礼物、自用衬衫、防晒、打印机护眼灯...来逛逛推荐意大利黑帮剧集Gomorrah使用 dnf 进行 Linux 包管理 | Linux 中国秋收暴动和毛泽东的“三湾子弟”在 Ubuntu Linux 如何安装 H.264 解码器 | Linux 中国使用 Go 和树莓派排查 WiFi 问题 | Linux 中国为了这台打印机,真是等了好久……上一个说“丼”不读jǐng的人,已经被我骂哭了用3D打印机给病人做耳朵 & 蛇毒变成止血药【把世界讲给孩子听】分享 8 篇使用 Linux 命令行的技巧 | Linux 中国Shortwave 3.0 发布:用户界面更新、私人电台以及诸多改进 | Linux 中国Linux 命令行小技巧 – !叹号的用处硬核观察 #681 首颗树莓派卫星完成了创纪录的飞行Fedora Linux 37 即将正式支持树莓派 4 | Linux 中国两个女人—转载资深UX设计师分享“桌游实验”:如何设计优秀的用户体验?使用 apt 进行 Linux 包管理 | Linux 中国在虚拟机中运行 Linux 的十大优点 | Linux 中国Fedora Linux 36 发布 | Linux 中国从3岁用到18岁,大牌打印机团购来了!印作业印照片超全能Linux 中国开通播客频道:“开源朗读者”和“硬核观察” | Linux 中国原油涨跌的故事实测 Linux Mint 升级工具 | Linux 中国最适合程序员的 10 款 Linux 发行版 | Linux 中国用 Gwenview 在 Linux 上裁剪和调整照片大小 | Linux 中国如何在 Linux 和 Windows 电脑之间共享文件 | Linux 中国如何在 Linux 桌面中启用 “激活 Linux” 水印通知 | Linux 中国被大家催了好久的打印机终于来了!还有网课必备的大屏学习机!使用树莓派做一个倒计时器 | Linux 中国使用 watch 和 tail 命令监视 Linux 上的活动 | Linux 中国darktable 4.0.0:用户界面改版,改进了色彩饱和度处理 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。