android 佩戴手表:使用 setPeekOpacityMode() 设置不透明度,使用 setCardPeekMode 设置高度

android wear watch: use setPeekOpacityMode() for opacity, use setCardPeekMode for height

android 开发者页面提供了有关 peek 卡片变量选项的以下信息:

选择此查看模式时,查看卡将根据需要设置高度,同时在顶部保持足够 space 以绘制系统时间和状态图标。

如何判断卡片有多少space?

我之所以问,是因为我的卡片看起来似乎很短,但卡片的正面会根据卡片的大小进行调整,并且需要两张内衬卡片。

编辑:我没有得到我正在寻找的行为,因为我使用了错误的方法来更改设置。由于被调用的整数对函数有意义,因此程序运行。

.setCardPeekMode(WatchFaceStyle.PEEK_MODE_VARIABLE)
.setPeekOpacityMode(WatchFaceStyle.PEEK_OPACITY_MODE_TRANSLUCENT

PEEK_OPACITY_MODE_TRANSLUCENT 与 PEEK_MODE_SHORT 的值相同 (1),因此第二行覆盖了第一行。

正确的代码是:

.setCardPeekMode(WatchFaceStyle.PEEK_MODE_VARIABLE)
.setPeekOpacityMode(WatchFaceStyle.PEEK_OPACITY_MODE_TRANSLUCENT)

卡片可能会覆盖屏幕的很大一部分,具体取决于系统 UI 样式。您的表盘应适应这些情况,确保用户在通知卡片出现时仍能知道时间。

要确定查看卡片上方的免费 space 以便调整表盘,请使用 WatchFaceService.Engine.getPeekCardPosition() 方法。

表盘不应干扰系统 UI 元素,如 Accommodate System UI Elements 中所述。如果您的表盘背景为浅色或在屏幕底部附近显示信息,您可能需要配置通知卡片的大小或启用背景保护。

@Override
public void onCreate(SurfaceHolder holder) {
super.onCreate(holder);

// configure the system UI
setWatchFaceStyle(new WatchFaceStyle.Builder(AnalogWatchFaceService.this)
.setCardPeekMode(WatchFaceStyle.PEEK_MODE_SHORT)
.setBackgroundVisibility(WatchFaceStyle
.BACKGROUND_VISIBILITY_INTERRUPTIVE)
.setShowSystemUiTime(false)
.build());
...
}

上面的代码片段将偷看卡片配置为单行高,将偷看卡片的背景仅短暂显示且仅用于中断通知,并且不显示系统时间。

Update

或者您可以使用 relative measurements,我们都知道设备有不同的尺寸和分辨率。

必须使用 Canvas.getWidth() and 'Canvas.getHeight()` 方法获取宽度和高度,并使用检测到的屏幕尺寸的分数设置图形元素的位置。如果您根据查看卡片调整表盘元素的大小,请使用卡片上方剩余 space 的一小部分值来重新绘制表盘。

请务必使用 .setCardPeekMode() 作为卡片高度和 .setPeekOpacityMode() 用于半透明。

因为高度和不透明度调用了相同的整数值,所以可以在 setCardPeekMood 中使用 WatchFaceStyle.PEEK_OPACITY_MODE_OPAQUE 并在 setPeekOpacityMode() 中使用 WatchFaceStyle.PEEK_OPACITY_MODE_TRANSLUCENT。这可能会导致不良影响。