Поддержка Android-поддержки 23.2 векторных чертежей размыты

В последней версии Android Support Library (23.2) добавлена ​​поддержка векторных чертежей. Похоже, что это происходит путем растрирования векторов "на лету" на платформах, которые не поддерживают векторные чертежи.

Однако изображение с растеризацией кажется фиксированным, что зависит от использования. Вот пример.

вектор

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zm0,3c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zm0,14.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/>
</vector>

Разметка

<ImageView
  android:layout_width="128dp"
  android:layout_height="128dp"
  android:id="@+id/imageView"
  app:srcCompat="@drawable/vector1"/>

Вектор 24dp x 24dp. Он используется в ImageView, 128dp x 128dp. На платформах, которые не поддерживают векторные чертежи, результирующее изображение размыто, потому что вектор растеризуется при 16dp и изменяется до 128dp.

Единственное решение, которое я нашел, - создать отдельный вектор, пригодный для каждого размера. Это довольно раздражает, чтобы создать кучу повторяющихся векторов с изменениями высоты и ширины. И это не решает проблему, если вы хотите, чтобы drawable для fill_parent или был динамически определен каким-то другим способом.

Чтобы определить размеры ваших векторных изображений в продвинутых, почти полностью поражает преимущество использования векторов в первую очередь.

Есть ли у кого-то истинная работа?

Ответ 1

вектор растеризуется при 16dp и изменяется до 128dp

до 23.1, Android создавал растровые изображения, начиная с предоставленного VectorDrawable. Это изменилось в v23.2 библиотеки поддержки. Это происходит, если вы правильно настроили свой build.gradle.

Если вы используете Gradle Plugin 2.0+, добавьте

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 } 

если вы используете 1.5.0

 android {  
   defaultConfig {  
     generatedDensities = []  
  }  

  // This is handled for you by the 2.0+ Gradle Plugin  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 } 

после синхронизации, очистки рабочего пространства и сборки снова. Вы можете прочитать об этом здесь и здесь

Ответ 2

увеличить Android: ширина, высота в вашем XML.

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"

После того, как я увеличил размеры, сгенерированный размер png также увеличился, и изображения перестали выглядеть размытыми.