矢量图变得像素化了

18

我使用了几张图片,通过Android Studio的矢量图标工具导入本地SVG文件。这些图片在我的Nexus 6P上加载得很好,但是在Sony Xperia Z上非常模糊,在Samsung Galaxy S2上更糟糕。

我理解的是,由于文件是XML(向量),而不是PNG文件,它应该能够自动调整大小,或者我忽略了什么。

我附上了3种情况的图片。

enter image description here

编辑:只是一些额外的信息:该文件最初是PNG格式,但是我使用了一个叫Vector Magic的程序将其完全转换为向量文件。我可以在Illustrator中打开并编辑每条线等。

通过使用VectorDrawableCompat.create(...)方法从VectorDrawable更改为VectorDrawableCompat来解决问题。谢谢@pskink。


3
是的,已确认。该工具可以从原始SVG文件生成位图:`Android 4.4(API级别20)及以下版本不支持矢量可绘制对象。如果您的最低API级别设置为这些API级别之一,则在使用矢量资源工作室时有两个选项:生成便携式网络图形文件(PNG)文件(默认值)或使用支持库。为了实现向后兼容性,矢量资源工作室会生成矢量可绘制对象的栅格图像。` 供参考,请查阅https://developer.android.com/studio/write/vector-asset-studio.html。 - Phantômaxx
1
@BobMalooga 感谢提供链接,非常有用。然而,Xperia Z 使用的是 Android 5.0.2,因此应该支持矢量图形,因此不应该模糊。 - Petersicecream
1
是的,它支持矢量图。但如果您提供位图,它将使用位图。 - Phantômaxx
1
首先检查它是VectorDrawable还是BitmapDrawable:使用Log.d记录View#getBackgroundImageView#getDrawable的值(我不知道你在哪里使用你的图像)。 - pskink
2
因此,在v5设备上VectorDrawable存在问题,所以请使用VectorDrawableCompat - pskink
显示剩余8条评论
3个回答

11

android:scaleType="fitXY"添加到图像中对我有帮助。


1
我尝试的大多数比例类型都可以正常工作。 - Darush
1
我使用了android:scaleType="centerInside",这解决了问题。 - HasanG

8

Android支持API级别21及更高版本的SVG。对于API级别19、20,它会回退到png生成。我们在应用中使用的SVG在这些版本中具有较小的尺寸,因此您可能会在屏幕上看到像素化的图像。在我的情况下,增加

<vector android:height="70dp" android:width="70dp"

将向量XML生成为更好的PNG格式,使其在旧设备上显示效果更佳。


1
太棒了!非常感谢你的回答! - matdev

2
最初的回答:对我而言,导致矢量图转换为png的原因是我的矢量图可绘制对象中的android:fillType =“evenodd”属性。当我从我的可绘制对象中删除这个属性(因此矢量图使用默认的nonzero填充类型)后,下次构建应用程序时一切都正常了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接