Я пытаюсь использовать векторные чертежи в своем приложении для Android. Из http://developer.android.com/training/material/drawables.html (выделено мной):
В Android 5.0 (уровень API 21) и выше вы можете определять векторные чертежи, которые масштабируются без потери определения.
Используя этот чертеж:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="@color/colorPrimary" android:pathData="M14,20A2,2 0 0,1 12,22A2,2 0 0,1 10,20H14M12,2A1,1 0 0,1 13,3V4.08C15.84,4.56 18,7.03 18,10V16L21,19H3L6,16V10C6,7.03 8.16,4.56 11,4.08V3A1,1 0 0,1 12,2Z" />
и этот ImageView:
<ImageView
android:layout_width="400dp"
android:layout_height="400dp"
android:src="@drawable/icon_bell"/>
создает это размытое изображение при попытке отобразить значок с разрешением 400 dp (на большом мобильном устройстве с высоким разрешением около 2015 года, на котором запущен леденец на палочке):
Изменение ширины и высоты в определении вектора, доступного для рисования, на 200dp значительно улучшает ситуацию при отображаемом размере 400dp. Однако, если установить его как доступный для рисования для элемента TextView (то есть значок слева от текста), теперь создается огромный значок.
Мои вопросы:
1) Почему в векторном чертеже указана ширина / высота? Я думал, что все дело в том, что они масштабируются вверх и вниз без потерь, делая ширину и высоту бессмысленными в своем определении?
2) Можно ли использовать один вектор, который можно рисовать как 24dp в TextView, но хорошо масштабируется, чтобы использовать гораздо большие изображения? Например, как мне избежать создания нескольких векторных чертежей разных размеров и вместо этого использовать тот, который масштабируется в соответствии с моими требованиями к визуализации?
3) Как эффективно использовать атрибуты ширины / высоты и в чем разница с viewportWidth / Height?
Дополнительные детали:
- Устройство работает под управлением API 22
- Использование Android Studio v1.5.1 с Gradle версии 1.5.0
- Манифест - это компиляция и целевой уровень 23, минимальный уровень 15. Я также пробовал переместить минимальный уровень на 21, но это не имело никакого значения.
- Декомпиляция APK (с минимальным уровнем 21) показывает единственный ресурс XML в папке с возможностью переноса. Растровые изображения не создаются.
New -> Vector Asset
ее, в мою папку с возможностью рисования удаляется XML-файл векторного изображения. Однако если я использую apktool для распаковки созданного APK, я вижу, что файлы XMLdrawable-anydpi-v21
правильно масштабируются на устройствах с API 21+. Растровые файлы помещаются вdrawable-<mdpi/hdpi/etc>-v4
папки и не используются на устройствах с API 21+ (на основании того факта, что они правильно масштабируются)