Как нарисовать значки на циферблате у поставщика услуг Android по износу?

Используя API-интерфейс "Осложнения", существует тип значка, но когда дело доходит до рисования значка, я не уверен, как это сделать.

Когда я рисую реальный циферблат, кажется, нет метода drawIcon. Например, что-то вроде 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

Вместо этого я мог бы просто скопировать все элементы рисования в локальный носимый модуль и обойти тип значка, передав строку, а оттуда просто нарисовать соответствующее растровое изображение. Но должен быть способ рисовать по иконке, иначе зачем она?

Я также не мог узнать от Googling, как преобразовать значок в растровое изображение, но это также кажется глупым, поскольку мне пришлось сначала преобразовать растровое изображение в значок, так как API хочет значок.

Любая помощь приветствуется.

Благодарю.

1 ответ

Решение

Хорошо, так что я не знаю, как я пропустил это, но это так просто, как

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

а потом увидел и удивился, почему я этого не пробовал.

Отредактируйте в ответ на комментарий: Если вы хотите использовать VectorDrawable, то адаптируйтесь по мере необходимости.