Android 支持库 23.2 矢量绘图模糊
Android Support Library 23.2 vector drawables are blurry
最新版本的 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。
我找到的唯一解决方案是为每个预期尺寸创建一个单独的矢量可绘制对象。创建一堆只有高度和宽度变化的重复向量是很烦人的。如果您希望 drawable 为 fill_parent 或以其他方式动态调整大小,这并不能解决问题。
必须提前定义矢量图像的尺寸几乎 完全抵消了使用矢量的好处。
有人有真正的解决方法吗?
the vector is rasterized at 16dp and resized to 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"
}
}
增加android:宽度,高度在你的XML。
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
我在这里增加尺寸后,生成的 png 尺寸也增加了,图像看起来不再模糊了。
最新版本的 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。
我找到的唯一解决方案是为每个预期尺寸创建一个单独的矢量可绘制对象。创建一堆只有高度和宽度变化的重复向量是很烦人的。如果您希望 drawable 为 fill_parent 或以其他方式动态调整大小,这并不能解决问题。
必须提前定义矢量图像的尺寸几乎 完全抵消了使用矢量的好处。
有人有真正的解决方法吗?
the vector is rasterized at 16dp and resized to 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"
}
}
增加android:宽度,高度在你的XML。
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
我在这里增加尺寸后,生成的 png 尺寸也增加了,图像看起来不再模糊了。