java - Android 游戏,在游戏 UI HUD 中花费的时间仅显示两位小数(仅数百秒)
问题描述
我正在编写一个简单的 Android 游戏,我希望我的游戏 UI HUD 仅显示花费的时间、经过的时间和类似的两位小数(即仅数百秒)。我的代码的一个示例是这样的:
canvas.drawText("Fastest: " + formatTime(fastestTime) + " S", 10, 20, paint);
formatTime 以毫秒为单位返回时间。(即 54.335 S)。这对我的需求没有用。正如之前其他问题中所建议的那样,我尝试了 DecimalFormat,但没有成功。我怀疑问题出在canvas.drawText而不是“简单” System.out.println()
非常感谢任何帮助。
解决方案
我想提出两种不同的方法来实现您的目标:
1.drawText()
查看Canvas的文档,似乎有一种方法也接受要绘制的字符串的第一个和最后一个索引。
drawText(CharSequence text, int start, int end, float x, float y, Paint paint)
在指定的 Paint 中绘制指定范围的文本,由 start/end 指定,其原点位于 (x,y)。
我建议将您的代码更改为:
canvas.drawText("Fastest: " + formatTime(fastestTime) + " S", 0, 7, 10, 20, paint);
开始:0,结束:7(因为“54.33 S”也包括点)。
一个可能的问题是秒数是否小于 10 或大于 100(这会影响字符串的长度,从而影响结束索引)。
- 如果“formatTime()”方法返回一个String,就可以得到'.'的索引。并添加 2 以添加毫秒。
- 如果“formatTime()”方法返回一个四舍五入的双精度数,则必须将双精度数转换为字符串并应用第 1 步。
drawText() 调用现在看起来像这样:
String time = formatTime(fastestTime);
int endIndex = time.indexOf('.') + 5;
canvas.drawText("Fastest: " + formatTime(fastestTime) + " S", 0, endIndex, 10, 20, paint);
2. 裁剪字符串
如果我的第一个解决方案不起作用(我没有尝试过),您可以简单地将字符串裁剪到毫秒并绘制整个字符串。
我假设格式化时间返回一个字符串(如果不将其转换为字符串并继续)。
String time = formatTime(fastestTime);
int endIndex = time.indexOf('.') + 3; //the endIndex of String.substring() is exclusive.
canvas.drawText("Fastest: " + time.substring(0, endIndex) + " S", 10, 20, paint);
推荐阅读
- c++ - C++ POINTERS(学生 * [n] 给出数组类型不可赋值的错误)
- javascript - Promise.allSettled 永远卡住
- android - 使用 Firebase 的 Google Sigin 无法在内部测试轨道中运行
- node.js - 如何修复 gulp-sass 安装错误
- delphi - TDateEdit 无法与数据源双向进行 LiveBinding
- javascript - 版本更新后 Cypress 文本执行错误
- amazon-web-services - 如何修复更新服务失败:容器 XXX 没有定义容器端口 80
- html - 如何在 div 中垂直和水平居中文本,同时围绕大小可以变化的图像流动
- macos - 我在mac终端上无法清除一个句子
- javascript - 使用反应原生日期时间选择器两次会出错?