Android应用中如何消除SVG路径间隙,正常显示SVG?
我在Android Studio开发应用时,通过「新建Vector Asset」导入SVG后,ImageView渲染的SVG路径之间出现了间隙:
而GIMP中打开该SVG显示正常(所有路径都是1px的正方形,紧密相邻):

以下是几种可行的解决方法:
关闭矢量图抗锯齿
打开导入后生成的矢量图xml文件,给根标签<vector>添加android:antialias="false"属性。抗锯齿会在路径边缘生成半透明过渡像素,导致相邻1px方块之间出现视觉间隙,关闭后能避免这个问题。确保viewport与缩放精度匹配
检查矢量图xml的android:viewportWidth和android:viewportHeight,保证和原SVG的视口尺寸完全一致。如果ImageView的尺寸是矢量图视口的整数倍,能避免非整数缩放带来的像素对齐偏差,减少间隙出现的概率。合并路径或使用平铺模式
如果方块是重复图案,可以将单个1px方块做成独立矢量图,然后通过BitmapDrawable设置tileMode="repeat"实现平铺,这种方式不会产生间隙;如果方块数量不多,直接在SVG编辑器里把相邻的方块路径合并成一个整体路径,减少渲染时的边缘计算。调整ImageView缩放类型
给ImageView设置android:scaleType="fitXY"或android:scaleType="centerCrop"(根据布局需求选择),避免默认缩放逻辑带来的精度损失,同时尽量让ImageView的宽高是矢量图视口尺寸的整数倍。
内容的提问来源于stack exchange,提问作者Ondin

