我该如何从Android Wear复杂性提供程序在手表表盘上绘制图标?

4
使用复杂性API时有一个图标类型,但是在绘制图标时我不确定要怎么做。
当我正在绘制实际的手表时,似乎没有绘制图标的方法。例如,类似canvas.drawIcon(icon)这样的东西。我只能看到如何绘制位图。
在我的drawComplications方法中,我有以下内容:
} else if (complicationData.getType() == ComplicationData.TYPE_ICON) {
                Icon icon = complicationData.getIcon();

然后我该如何将图标绘制到画布上?
这里的代码实验室没有告诉我们如何绘制图标:https://codelabs.developers.google.com/codelabs/complications/index.html?index=..%2F..%2Findex#3 我可以将所有可绘制的内容复制到本地可穿戴模块中,通过传递字符串来绕过图标类型,并从那里绘制适当的位图。但是必须有一种从图标绘制的方式,否则为什么要有它呢?
我还无法从谷歌搜索中找到如何将图标转换为位图的方法,但这似乎很愚蠢,因为我首先必须将位图转换为图标,因为API需要一个图标。
感谢任何帮助。
谢谢。
1个回答

5

好的,我不知道我是怎么错过这个问题的,但它非常简单。

Drawable drawable = icon.loadDrawable(getApplicationContext());

那就按照你已经知道的方法做吧:
if (drawable instanceof BitmapDrawable) {
    Bitmap bitmap;
    bitmap = ((BitmapDrawable) drawable).getBitmap();
    canvas.drawBitmap(bitmap, complicationsX, mTopComplicationY, null);
}

我在这里查看了https://developer.android.com/reference/android/graphics/drawable/Icon.html#loadDrawable(android.content.Context),然后想知道为什么我之前没有尝试过它。 编辑:根据评论进行编辑:如果您想使用VectorDrawable,则需要相应地进行调整。

嗨。这似乎在大多数情况下都会失败,因为它通常是附加到图标的矢量可绘制对象。我改用了以下方法:https://dev59.com/NnA75IYBdhLWcg3w6Nr8#10600736 - Thomas Thomas
第一行是答案。使用任何你想要的可绘制对象。在我的情况下,我正在使用位图。你引用的答案甚至没有提到icon.loadDrawable,所以它完全不能作为对我的问题的答案。 - Michael Vescovo
我同意你的解决方案,使用icon.loadDrawable。但是似乎我不能总是将返回的Drawable强制转换为BitmapDrawable。有时返回的Drawable是VectorDrawable,这会导致崩溃。这就是为什么我提到了这个链接,用于将Drawable转换为Bitmap。 - Thomas Thomas
就像电池的默认图标一样:它似乎是一个VectorDrawable,而将其转换为BitmapDrawable对我来说会崩溃。但也许我错过了什么?看起来你找到了一种使用任何类型的drawable的方法,我非常感兴趣,因为我目前正在研究它。 - Thomas Thomas
请问如何在Android Wear表盘上设置复杂的小图标和范围值? - Sachin Suthar
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接