缩放会导致像素化矢量绘图
Posted
技术标签:
【中文标题】缩放会导致像素化矢量绘图【英文标题】:Scaling causes pixelated vector drawables 【发布时间】:2019-09-17 18:44:36 【问题描述】:我有一个ConstraintLayout
,我使用scaleX
和scaleY
对其进行缩放,这在大多数设备上都能完美运行,但我注意到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_width
和 android: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更新了问题。谢谢! 很高兴让我在不同的设备上运行它 我又添加了一个可能有帮助的建议 设置高度和宽度没有区别 我真的很抱歉,也许它只在我的设备中显示完美以上是关于缩放会导致像素化矢量绘图的主要内容,如果未能解决你的问题,请参考以下文章
当使用 css3 缩放元素时,它会变成像素化,直到动画完成之后。我正在为带有边框的元素制作动画