Как центрировать вектор, который можно рисовать в списке слоев без масштабирования
Я пытаюсь использовать VectorDrawable
в LayerList
без масштабирования вектора. Например:
<layer-list>
<item android:drawable="@color/grid_item_activated"/>
<item android:gravity="center" android:drawable="@drawable/ic_check_white_48dp"/>
</layer-list>
Выбираемый идентификатор ic_check_white_48dp
, определяемый как:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>
Желаемый эффект заключается в том, что значок проверки будет центрироваться в растягиваемом слое без масштабирования. Проблема в том, что приведенный выше список слоев заставляет значок проверки масштабироваться в соответствии с размером слоя.
Я могу произвести желаемый эффект, если я заменил вектор, который можно рисовать с помощью PNG для каждой плотности, и изменит список слоев как таковой:
<layer-list>
<item android:drawable="@color/grid_item_activated"/>
<item>
<bitmap android:gravity="center" android:src="@drawable/ic_check_white_48dp"/>
</item>
</layer-list>
Есть ли способ сделать это с помощью VectorDrawable
?
Ответы
Ответ 1
Борясь с той же проблемой. Единственный способ, который я нашел, чтобы исправить это и избежать масштабируемого масштабирования, заключался в том, чтобы установить размер рисунка и использовать гравитацию, чтобы выровнять его:
<layer-list>
<item android:drawable="@color/grid_item_activated"/>
<item
android:gravity="center"
android:width="48dp"
android:height="48dp"
android:drawable="@drawable/ic_check_white_48dp"/>
</layer-list>
Надеюсь, что это поможет!
Ответ 2
Я столкнулся с той же проблемой, пытаясь центрировать векторы drawables в многоуровневом списке.
У меня есть обходное решение, это не совсем то же самое, но оно работает, вам нужно установить размер для всего выделенного и добавить дополнение к элементу вектора:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<size android:height="120dp" android:width="120dp"/>
<solid android:color="@color/grid_item_activated"/>
</shape>
</item>
<item android:top="24dp"
android:bottom="24dp"
android:left="24dp"
android:right="24dp"
android:drawable="@drawable/ic_check_white_48dp"/>
</layer-list>
Размер вышеприведенной формы задает размер всего выделенного 120dp в этом примере, добавление второго элемента, 24dp в этом примере, центрирует векторное изображение.
Не то же самое, что использовать gravity="center"
, но его рабочий способ использования векторов в API 21 и 22.