Android 小SVG imageview看起来模糊或;“弯曲的”;

Android 小SVG imageview看起来模糊或;“弯曲的”;,android,imageview,android-vectordrawable,Android,Imageview,Android Vectordrawable,我已经通过Android Studio生成了一个矢量资产(基于自己的svg文件) “我的图像”视图的布局代码: <ImageView android:id="@+id/iv_drink" android:layout_width="21dp" android:layout_height="30dp" android:layout_marginStart="24dp" android:layout_marginB

我已经通过Android Studio生成了一个矢量资产(基于自己的svg文件)

“我的图像”视图的布局代码:

<ImageView
        android:id="@+id/iv_drink"
        android:layout_width="21dp"
        android:layout_height="30dp"
        android:layout_marginStart="24dp"
        android:layout_marginBottom="4dp"
        android:scaleType="fitXY"
        app:srcCompat="@drawable/ic_smoothie_icon" />

问题是,这个小版本的图像看起来“弯曲”或模糊。下面是一个增大尺寸的屏幕截图(这样你可以看到图像的扭曲边缘)

我的CompileSDK版本是28,MinSDK版本是21

我尝试使用以下方法解决此问题:

  • imageview:android:scaleType=“fitXY”
  • imageview:app:srcCompat而不是app:src
  • build.gradle:vectorDrawables.useSupportLibrary=true
  • 在资产xml中尝试了不同的大小
什么可能导致此问题?

编辑: 这是svg的内容(图像基于freepik.com上的文件):


矢量xml:

<vector android:height="12.3dp" android:viewportHeight="123"
    android:viewportWidth="86" android:width="8.6dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#000000" android:pathData="M85.6,22.6l-6.1,100h-49.9l-6.1,-100h20.7c-0.6,-5.7 -1,-9.9 -1.1,-11.7c-0.3,-4.8 -1.6,-6.1 -2.1,-6.5c-0.4,-0.3 -0.9,-0.6 -0.9,-0.6l-0.3,-0.2L0,3.6v-3.1c0,0 14.6,-0.5 26.9,-0.5c8.4,0 15.8,0.2 16.8,1c2.3,1.8 3.7,4.8 4,9.8c0.1,1.8 0.5,6.1 1.1,11.8L85.6,22.6L85.6,22.6z"/>
</vector>

我认为,在低分辨率的情况下,倾斜线条的平滑度已经达到极限。模糊是由于,这是一种尝试平滑锯齿状边缘,这将导致使用黑色或白色像素


如果你想减少“弯曲”效果,你可以尝试改变杯子侧面的坡度。因为你的杯面几乎是垂直的,每边都有几个大台阶,所以曲线更明显。使它们完全垂直,或更倾斜。垂直线将没有台阶。更倾斜的直线会有更多的台阶,但台阶更小,所以它们应该不会那么颠簸。

这里我使用更适合缩放的尺寸和角度制作了矢量,请记住,我们不能绘制半个像素,会涉及抗锯齿,但我们可以通过调整形状来减轻。当使用矢量和动画矢量时,您可以使用它编辑路径,使其对android友好,甚至可以对其设置动画

<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="M9,21L7,6L12,6C12,6,12.013,4.071,12,3.5C,11.987,2.929,12.081,3,11.5,3,L4,3L4,2C4,2,11.505,2.006,12,2,C12.26,2.015,12.506,2.125,12.691,2.309,C12.875,2.494,12.985,2.74,13,3L13,6L18,6L16,21Z"/>
</vector>

我认为您的问题是因为scaleType。当然,向量的宽度和高度也有问题。请试试这个:

<ImageView
        android:id="@+id/iv_drink"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="24dp"
        android:layout_marginBottom="4dp"
        app:srcCompat="@drawable/ic_smoothie_icon" />


Log.d
ImageView.getDrawable()(或
ImageView.getDrawable().getClass()
)的值,您看到了什么?结果是“class android.graphics.drawable.VectorDrawable”。或者我误解了您的意思?如果您使用的是
vectorDrawables.useSupportLibrary=true
,情况也一样?这张图片是桌面上的打印屏幕还是来自真实设备?因为如果这是在模拟器上,那么在真实设备上可能会很好,因为真实设备上的密度会大得多,抗锯齿效果会好得多。请将svg的详细信息放在这里。这是一个很好的观点,Jan的
android:scaleType=“fitXY”
通常会导致拉伸,扭曲纵横比,这可能导致这个问题。然而,他并排展示的两幅图像具有相同的纵横比,这表明纵横比不是问题所在。
<ImageView
        android:id="@+id/iv_drink"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="24dp"
        android:layout_marginBottom="4dp"
        app:srcCompat="@drawable/ic_smoothie_icon" />