13

最新版本的 Android 支持库 (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。它用于 128dp x 128dp 的 ImageView。在不支持矢量绘图的平台上,生成的图像是模糊的,因为矢量在 16dp 时被光栅化并调整为 128dp。

我发现的唯一解决方案是为每个预期大小创建一个单独的矢量可绘制对象。创建一堆只有高度和宽度变化的重复向量非常烦人。如果您希望可绘制对象为 fill_parent 或以其他方式动态调整大小,这并不能解决问题。

必须预先定义矢量图像的尺寸几乎完全破坏了首先使用矢量的好处。

有没有人有真正的解决方法?

4

2 回答 2

17

矢量以 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"  
  }  
 } 

同步后,清理工作区并重新构建。您可以在此处此处阅读有关它的更多信息

于 2016-03-02T19:57:40.067 回答
2

在你的 XML 中增加 android:width,height。

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

在我在这里增加尺寸后,生成的 png 尺寸也增加了,图像看起来不再模糊。

于 2018-10-26T10:51:46.957 回答