缩放会导致像素化矢量绘图

Posted

技术标签:

【中文标题】缩放会导致像素化矢量绘图【英文标题】:Scaling causes pixelated vector drawables 【发布时间】:2019-09-17 18:44:36 【问题描述】:

我有一个ConstraintLayout,我使用scaleXscaleY 对其进行缩放,这在大多数设备上都能完美运行,但我注意到ConstraintLayout 中的ImageViews 在某些手机上看起来非常像素化(运行 android 9 的 OnePlus)。

三星 Galaxy S10,Android 9,全高清分辨率:

三星 Galaxy S10,Android 9,WHQL 分辨率:

ImageView 使用矢量可绘制对象,我们设置了以下内容:

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) vectorDrawables.useSupportLibrary = true

但图像在某些手机 (OnePlus) 上仍然像素化

有什么想法吗?

编辑

这是可绘制的:

<vector
    android:
    android:viewportHeight="52"
    android:viewportWidth="52"
    android:
    xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#00394D" android:fillType="evenOdd"
        android:pathData="M1.0024,26.342C0.8134,12.559 11.873,1.1907 25.6569,1.0018L26.0037,1C39.5995,1 50.8108,12.0613 50.9971,25.658C51.186,39.441 40.1256,50.8093 26.3417,50.9973L25.994,51C12.399,51 1.1878,39.9387 1.0024,26.342ZM25.7394,7.0155C20.6766,7.0856 15.9386,9.1268 12.3982,12.7657C8.8577,16.4046 6.946,21.1976 7.0152,26.2604C7.1562,36.5854 15.6707,44.9863 25.9957,44.9863L26.2592,44.9845C36.7271,44.8408 45.1271,36.2075 44.9843,25.7396C44.8423,15.4146 36.3279,7.0137 26.0037,7.0137L25.7394,7.0155Z"
        android:strokeColor="#00000000" android:strokeWidth="1"/>
    <path android:fillColor="#009DDB" android:fillType="evenOdd"
        android:pathData="M26.3287,12.2772C24.6911,12.2772 23.3593,13.6099 23.3593,15.2476L23.3593,28.2101C23.3593,28.4019 23.3795,28.5973 23.4171,28.791L23.4706,28.9811L23.5135,29.1222L23.5862,29.3456C23.6213,29.4297 23.6642,29.5086 23.7089,29.5857L23.7737,29.7048L23.8579,29.8564C23.97,30.0238 24.0962,30.1771 24.232,30.3129L29.5645,35.6464C30.1253,36.208 30.871,36.5164 31.6648,36.5164C32.4586,36.5164 33.2043,36.208 33.765,35.6464C34.9225,34.4889 34.9225,32.6042 33.765,31.4467L29.2982,26.9807L29.2982,15.2476C29.2982,13.6099 27.9664,12.2772 26.3287,12.2772"
        android:strokeColor="#00000000" android:strokeWidth="1"/>
</vector>

这是ImageView

<ImageView
    android:id="@+id/clock"
    android:layout_
    android:layout_
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:scaleType="fitXY"
    app:srcCompat="@drawable/ic_clock"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

【问题讨论】:

android:layout_widthandroid:layout_height 尝试将其设为 wrap_content 并让矢量自行调整,并尝试仅更改矢量大小 在drawable-xxxhdpi和drawable-xxhdpi中添加相同的文件 这能回答你的问题吗? Why isn't my vector drawable scaling as expected? 【参考方案1】:

您可以将android:scaleType="fitXY" 添加到 ImageView

或许能解决你的问题

并确保你的向量不包含像这样的十进制值 .2 或 .4 它应该像 0.2 和 0.4 你可以从代码检查器分析它

您甚至可以在设置 24dp 时更改矢量的宽度和高度,因为默认情况下您可以尝试这样它可能会有所帮助

<vector android: android:

像这样的

【讨论】:

试过了,用drawable和imageview更新了问题。谢谢! 很高兴让我在不同的设备上运行它 我又添加了一个可能有帮助的建议 设置高度和宽度没有区别 我真的很抱歉,也许它只在我的设备中显示完美

以上是关于缩放会导致像素化矢量绘图的主要内容,如果未能解决你的问题,请参考以下文章

UIView中矢量图形的平滑缩放

缩放时多个 UIView 像素化

canvas-缩放

当使用 css3 缩放元素时,它会变成像素化,直到动画完成之后。我正在为带有边框的元素制作动画

从代码(PaintCode)绘制的视图是像素化的,缩放时非常像素化

求助一下各位大大html5 canvas 缩放的时候会出现锯齿