java - 如何在 Wear OS 中将秒针手表在一秒钟内旋转五次?
问题描述
我正在开发一个表盘,想在 1/5 秒内将秒针旋转 1.2 度。
为什么会有这些数字?
1) 360 度/60 秒 = 6 度/秒
2) 6 度 / 5 = 1.2 度(在五分之一秒内旋转 1.2 度)。
下面是正常旋转(每秒 6 度)。
上图花费一秒钟旋转 6 度。
我的问题是:如何花五分之一秒旋转 1.2 度?
这是我的代码:
private void drawClassicSecondsHand(Canvas canvas) {
final int seconds = (mCalendar.get(Calendar.SECOND));
final float secondsRotation = seconds * 6;
float originRadius = complicationHandBitmap.getWidth() / 2f;
float secondsAreaCenterX = mCenterX - (float) (mCenterX * 0.45);
canvas.rotate(secondsRotation, secondsAreaCenterX, mCenterY);
classicSecondsComplication.draw(
canvas,
secondsAreaCenterX,
mCenterY,
classicComplicationRadius,
complicationHandBitmap,
originRadius);
}
onDraw
以上方法在我的表盘服务的方法中调用。
public void onDraw(Canvas canvas, Rect bounds) {
...
drawClassicSecondsHand(Canvas canvas);
}
解决方案
我不确定onDraw
现在从哪里调用您的方法,但是从电池寿命的角度来看,持续更新并不好。
如果您在 Android Studio 中创建一个新项目并选择 Wear OS 和模拟表盘模板,您将看到更好的方法。在最底部,他们设置了一个消息处理程序,它将以特定的时间间隔(在交互模式下)触发表盘的重绘。
/**
* Handle updating the time periodically in interactive mode.
*/
private void handleUpdateTimeMessage() {
invalidate();
if (shouldTimerBeRunning()) {
long timeMs = System.currentTimeMillis();
long delayMs = INTERACTIVE_UPDATE_RATE_MS
- (timeMs % INTERACTIVE_UPDATE_RATE_MS);
mUpdateTimeHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIME, delayMs);
}
}
(它的部分比上面的片段更多,但一切都在示例表盘中。)
在此示例中,INTERACTIVE_UPDATE_RATE_MS 设置为秒。您只需将其设置为 200 毫秒,您的表盘将每秒更新五次。每次将画布旋转 1.2 度,您将获得所需的秒针运动。
推荐阅读
- reactjs - 我们可以在 reactjs 中使用 React-Native 库吗?
- node.js - 如何在 Express.js 应用程序中使用 Reveal.js?
- javascript - 在组件的根目录中提供服务时如何监视服务方法
- python - PyInstaller 和 Google Vision - 转换时出错
- vue.js - 如何访问计算的状态变量?
- php - 如何使用 2 个特定键的值对多维数组进行排序
- sql - 从每个产品类别购物的客户;他们在 SQL Server 项目中平均购买了多少产品类别?
- security - Microsoft Graph - 如何使用安全警报“文件删除量异常”获取关联文件
- java - 工具栏在创建时自动显示后退箭头
- azure - Azure 应用程序网关 ARM 模板问题与 backendHttpSettingsCollection 中的 pickHostNameFromBackendAddress 和主机名